Question
A propos du script Tester si un fichier est locké
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 8 mois #4889
par Laurent Dardenne
Tutoriels PowerShell
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.
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.073 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Discussions générales
- A propos du script Tester si un fichier est locké