Puis-je utiliser le constructeur FileStream
pour m'assurer qu'un seul processus accède à un fichier à la fois? Est-ce que le code suivant fonctionnera?Puis-je utiliser FileStream pour implémenter un verrouillage de fichier?
public static IDisposable AcquireFileLock() {
IDisposable lockObj;
do {
// spinlock - continually try to open the file until we succeed
lockObj = TryOpenLockFile();
// sleep for a little bit to let someone else have a go if we fail
if (lockObj == null) Thread.Sleep(100);
}
while (lockObj == null);
return lockObj;
}
private static FileStream TryOpenLockFile() {
try {
return new FileStream(s_LockFileName, FileMode.Create, FileAccess.Read, FileShare.None);
}
catch (IOException) {
return null;
}
}
En particulier, le comportement avec FileMode.Create
WRT atomique autres processus? Y a-t-il autre chose que je devrais utiliser?
EDIT: pour être plus précis, il s'agit de Microsoft CLR utilisant des fichiers locaux sur une seule machine.
Cela semble bon! Mais qui nettoie le fichier de verrouillage? Il n'y a probablement aucun besoin fonctionnel de le faire puisque l'invocation de ctor 'FileStream' écrase toujours le fichier de verrou existant. –
Pour le nettoyage, je pourrais toujours 'essayer {File.Delete (...)}' et ignorer toutes les exceptions (car cela signifie qu'un autre processus a pris le verrou pendant ce temps) ... – thecoop