Fichier de verrouillage exclusivement ensuite supprimer/déplacer

Je suis l'implémentation d'une classe en C# qui est censé surveiller un répertoire, les processus, les fichiers sont supprimés, puis de supprimer (ou déplacer) le fichier traité dès que le traitement est terminé. Car il peut y avoir plusieurs threads s'exécutant ce code, le premier qui prend le fichier, il verrouille exclusivement, donc pas d'autres threads de lire le même fichier et pas de processus externe, ou l'utilisateur peut accéder en quelque sorte. Je tiens à garder le verrou jusqu'à ce que le fichier est supprimé/déplacé, donc il n'y a pas de risque d'un autre thread/processus/l'utilisateur accède.

Jusqu'à présent, j'ai essayé 2 options de mise en œuvre, mais aucun d'entre eux fonctionne comme je veux.

Option 1

FileStream fs = file.Open(FileMode.Open, FileAccess.Read, FileShare.Delete);
//Read and process
File.Delete(file.FullName); //Or File.Move, based on a flag
fs.Close();

Option 2

FileStream fs = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
//Read and process
fs.Close();
File.Delete(file.FullName); //Or File.Move, based on a flag

Le problème avec Option 1 est que d'autres processus peuvent accéder au fichier (on peut les supprimer, déplacer, renommer) alors qu'il devrait être complètement verrouillé.

Le problème avec Option 2 est que le fichier est déverrouillé, avant d'être supprimée, de sorte que d'autres processus/threads peuvent verrouiller le fichier avant de le supprimer arrive, donc le supprimer échouera.

Je cherchais des API qui peut effectuer la suppression en utilisant le descripteur de fichier j'ai déjà un accès exclusif.

Modifier

Le répertoire surveillé réside dans un pub de l'action, de sorte que les autres utilisateurs et les processus ont accès.
La question n'est pas de gérer les verrous à l'intérieur de mon propre processus. La question que je suis en train de le résoudre est de savoir comment verrouiller un fichier exclusivement ensuite déplacer/supprimer sans relâcher le verrou

vous pouvez le renommer en quelque chose que les autres threads ne capte pas, avant de la traiter?
Les noms de fichiers peuvent être anytthing, donc renommer ne serait pas aider. Même le nom de fichier est important, je veux éviter à tout autre processus ou de l'utilisateur qui a accès au dossier de la toucher, alors qu'il est verrouillé.

OriginalL'auteur GDemartini | 2013-03-26

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *