Fichier.Ouvert pour les accès en lecture refusé sur l'exécution de fichier dans Windows

J'ai un problème avec les autorisations de fichier sur l'exécution de fichiers de Windows, qui semble être résolu après à la suite d'un forum de la pointe[1], mais je ne comprends pas pourquoi. Peut-être que vous les gars peut vous aider.

Je vérifie la bannière d'un fichier, en l'exécutant (la lecture de la sortie de la console), puis d'ouvrir le même fichier pour la lecture par la suite à l'aide de FileStream:

public void fileMD5(string filename) {
  if (!File.Exists(filename)) return NT.Fail("File does not exist: " + filename);

  BinaryReader stream = new BinaryReader(File.Open(filename,
      FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
  int bufferSize = 4096;
  byte[] buffer = new byte[bufferSize];
  int readBytes;
  while ((readBytes = stream.Read(buffer, 0, bufferSize)) > 0) {
    md5Hasher.TransformBlock(buffer, 0, readBytes, buffer, 0);
  }
  stream.Close();
}

fileMD5('sample.exe');

et à chaque fois dans un certain temps, je voudrais obtenir de fichier est utilisé par un autre processus". À partir de Wikipedia, je sais que Windows va définir un verrouillage de l'exécution de fichiers de nier l'accès en écriture[2], mais je suis seulement en lecture. Aussi, le processus devrait avoir arrêté déjà quand j'essaie de l'ouvrir.

Du post sur le forum, il semblerait que l'ajout d'un partage de fichiers.ReadWrite voulez aider et il semble qu'Il n':

FileStream stream = File.Open('sample.exe', 
    FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

Mais je ne comprends pas pourquoi. Est-il une condition de concurrence ici que je ne vois pas?

Également le Fichier.Appel ouvert semble être beaucoup plus rapide avec FileShare.ReadWrite au lieu de la valeur par défaut (qui je suppose est FileShare.Lire).

[1] http://www.xtremevbtalk.com/archive/index.php/t-192118.html

[2] http://en.wikipedia.org/wiki/File_locking#In_Microsoft_Windows

et avez-vous bien fermé toutes les précédentes poignées pour le fichier? veuillez fournir plus de code
Vous attendez sample.exe pour la sortie je suppose?
vous devez fermer le flux de données par rapport aux versions précédentes
Il n'y a aucun précédent poignées pour le fichier, mais plus de code fourni, de toute façon. Et je ne attendre sample.exe à la sortie, oui.
Pensez-vous à l'aide de Win7 ?

OriginalL'auteur Vegar Westerlund | 2011-08-10