2009-03-18 13 views

Odpowiedz

2

Jeśli masz kontrolę pierwszego procesu można określić typ pliku akcji uchwyt

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

Nie mam kontroli nad procesem blokowania pliku. – Malfist

9

To pytanie jest dość stary już, więc moja odpowiedź może nie mieć większego zastosowania do ciebie, ale jak bycie Q & Witryna może nadal pomaga komuś innemu.

nie mogę/nie chcą odłożyć całą realizację, ale procedura jest coś takiego:

  1. utworzyć Volume Shadow Copy poprzez Volume Shadow Service Provider dla osób napęd tam, gdzie znajduje się plik do odczytania (jest to dobrze udokumentowane w witrynie MSDN, istnieje również przykładowy klient, który tworzy te kopie w tle i najprawdopodobniej będzie wystarczający). mechanizm "oddzwaniania" (wywołuje twoją aplikację)

  2. Otwórz żądany plik za pomocą ścieżek UNC i CreateFile (UNC wygląda mniej więcej tak: \\ \ GlobalRoot \ Devices \ HarddiskVolumeShadowCopyXZY \ yourpath \ yourfile.yourextension?)

  3. robić, co chcesz z plikiem

  4. Jeśli popełnisz uporczywy VSC należy użyć klienta próbki, aby go usunąć po zakończeniu

więcej informacji tutaj: http://technet.microsoft.com/en-us/library/cc785914%28WS.10%29.aspx i tutaj: http://msdn.microsoft.com/en-us/library/bb968832%28VS.85%29.aspx

+2

Problem polega na tym, że wbudowane narzędzia do zarządzania plikami .NET nie mają dostępu do dyrektyw \\? \ GlobalRoot. W rzeczywistości musisz zejść na poziom winapi. Istnieje biblioteka o nazwie AlphaFSS, która może, ale ma kilka poważnych problemów. Używałem go przez jakiś czas, ale napotkano problemy z rozmiarem pliku wymaganym zarówno dla DWORD do reprezentowania jego rozmiaru, AlphaFSS odczytuje tylko niższy DWORD. – Malfist