2009-03-18 11 views

risposta

2

Se si ha il controllo del primo processo è possibile specificare handle di file di tipo quota

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

Non ho il controllo del processo che blocca il file. – Malfist

9

Questa domanda è abbastanza vecchio già, quindi la mia risposta non potrebbe essere di grande utilità per voi, ma in modo da essere un Q & Un sito forse aiuta ancora qualcun altro.

non posso/non voglio mettere giù l'intera implementazione, ma la procedura è più o meno così:

  1. Si crea un Volume Shadow Copy tramite il Volume Shadow Service Provider per la guida dove si trova il tuo file da leggere (questo è ben documentato su MSDN, c'è anche un client di esempio che crea queste copie shadow e sarà probabilmente sufficiente per te)

  2. O fare uno persistente, o usare il meccanismo di "callback" (chiama la tua app)

  3. Aprire il file desiderato tramite percorsi UNC e CreateFile (UNC simile a questa: \\ \ GlobalRoot \ Devices \ HarddiskVolumeShadowCopyXZY \ yourpath \ yourfile.yourextension?)

  4. fare quello che vuoi con il file

  5. Se hai fatto un VSC persistente si dovrebbe utilizzare il client di esempio per eliminarlo dopo aver finito

maggiori informazioni qui: http://technet.microsoft.com/en-us/library/cc785914%28WS.10%29.aspx e qui: http://msdn.microsoft.com/en-us/library/bb968832%28VS.85%29.aspx

+2

Il problema è che gli strumenti di gestione file incorporati di .NET non possono accedere alle direttive \\? \ GlobalRoot. Devi effettivamente scendere al livello di Winapi. C'è una libreria chiamata AlphaFSS che può, ma ha alcuni problemi importanti. L'ho usato per un po 'ma ho incontrato problemi con le dimensioni del file richieste sia da DWORD che per rappresentare la sua dimensione, AlphaFSS legge solo DWORD inferiore. – Malfist

Problemi correlati