Question A propos du script Tester si un fichier est locké

Plus d'informations
il y a 16 ans 8 mois #4889 par Laurent Dardenne
Arnaud ton script ne répond pas à toutes les situations,
il répond plutot à la question puis-je lire tel fichier.

Un exemple autour d'un assembly qui n'est pas dans le GAC :
[code:1]
$pwd=\"G:\PS\temp\WMIEvent\WMIEvent\bin\Debug\"
cd $pwd
[reflection.assembly]::loadfrom(\"$pwd\WMIEvent.dll\"«»)
[/code:1]
Ensuite je teste avec ton script :
[code:1]
test-filelock \"$pwd\WMIEvent.dll\"
#False
del \"$pwd\WMIEvent.dll\"
#Remove-Item : Impossible de supprimer l'élément G:\PS\temp\WMIEvent\WMIEvent\bin\Debug\WMIEvent.dll :
#Le processus ne peut pas accéder au fichier 'G:\PS\temp\WMIEvent\WMIEvent\bin\Debug\WMIEvent.dll', car
#il est en cours d'utilisation par un autre processus.
[/code:1]
Mais je peux toujours lire cet assembly, dans reflector.exe par exemple

Si je prend celui-ci le résultat est correct :
[code:1]
testfilelock \"$pwd\WMIEvent.dll\"
#FilePath IsLocked
#

#G:\PS\temp\WMIEvent\WMIEvent\bin\Debug\WMIEvent.dll True

[/code:1]
Si dans ce second script je modifie la ligne suivante
[code:1]
$fileStream = $fileInfo.Open( [System.IO.FileMode]::OpenOrCreate, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None )
[/code:1]
en
[code:1]
$fileStream = $fileInfo.Open( [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::Read)
[/code:1]
j'obtient le même comportement, normal puisque le code source de cette méthode est identique :
[code:1]
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public FileStream OpenRead() {
return new FileStream(FullPath, FileMode.Open, FileAccess.Read,
FileShare.Read);
}

[/code:1]
:)

Le second script peut être amélioré, notamment si on souhaite connaitre la raison, il se peut aussi que le compte n'ait pas les droits d'accès sur le fichier.
Ce qui est en soi une forme de verrouillage mais pour le support ce n'est pas la même chose.
Ensuite comme on y ouvre le fichier en OpenOrCreate, s'il n'existe pas on le créé. On peut donc se retrouver avec un fichier de taille zéro, faut juste le savoir et en tenir compte dans le traitement qui suit ce test.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.078 secondes
Propulsé par Kunena