2009-03-18 4 views

Répondre

2

Si vous avez le contrôle du premier processus, vous pouvez spécifier le fichier poignée type de partage

string contents1; 
string contents2; 
using (FileStream fs1 = new FileStream("test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    using (var tr1 = new StreamReader(fs1)) 
    { 
     using (FileStream fs2 = new FileStream("test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
     { 
      using (var tr2 = new StreamReader(fs2)) 
      { 
       contents2 = tr2.ReadToEnd(); 
       contents1 = tr1.ReadToEnd(); 
      } 
     } 
    } 
} 

Console.WriteLine(contents1); 
Console.WriteLine(contents2); 
+0

Je n'ai pas le contrôle du processus de verrouillage du fichier. – Malfist

9

Cette question est assez vieux déjà, ma réponse pourrait ne pas être d'une grande utilité pour vous, mais étant SO Q & Un site peut-être qu'il aide encore quelqu'un d'autre.

Je ne peux pas/ne veux pas mettre sur la mise en œuvre ensemble, mais la procédure est quelque chose comme ceci va:

  1. Vous créez un Volume Shadow Copy via le Volume Shadow Service Provider pour la lecteur où se trouve votre fichier à lire (cela est bien documenté sur MSDN, il y a aussi un exemple de client qui crée ces clichés instantanés et sera probablement suffisant pour vous)

  2. Soit en faire un persistant, soit utiliser le mécanisme "callback" (appelle votre application)

  3. Ouvrez le fichier désiré via les chemins UNC et CreateFile (l'UNC ressemble à ceci: \\ \ GLOBALROOT \ Devices \ HarddiskVolumeShadowCopyXZY \ YourPath \ yourfile.yourextension?)

  4. Faites ce que vous voulez avec le fichier

  5. Si vous avez fait une VSC persistante vous devez utiliser le client de l'échantillon pour vous le supprimer après avez terminé

plus d'info ici: http://technet.microsoft.com/en-us/library/cc785914%28WS.10%29.aspx et ici: http://msdn.microsoft.com/en-us/library/bb968832%28VS.85%29.aspx

+2

Le problème est que les outils de gestion de fichiers intégrés de .NET ne peuvent pas accéder aux directives \\? \ GlobalRoot. Vous devez réellement tomber au niveau de winapi. Il y a une bibliothèque appelée AlphaFSS qui peut, mais elle a quelques problèmes majeurs. Je l'ai utilisé pendant un certain temps, mais j'ai rencontré des problèmes avec la taille du fichier nécessaire à la fois DWORD pour représenter sa taille, AlphaFSS ne lit que le DWORD inférieur. – Malfist

Questions connexes