2010-09-14 10 views
27

Ho un piccolo problema. Ho uno strumento che dovrebbe analizzare un file di registro ogni giorno, purtroppo questo file di registro è in uso dal processo che scrive sul log e non posso fermarlo.Come si legge un file che è in uso?

Il primo tentativo è stato quello di creare una copia del file, che non funziona neanche.

C'è un modo per me di leggere il testo corrente del file di registro, anche se è già in uso?

+1

Come hai provato a leggerlo? – jgauffin

+1

Dipende da come lo strumento apre il file di registro. Se è bello e utilizza FILE_SHARE_READ, puoi aprire il file di registro per la lettura come suggerito da altri poster; altrimenti sfortuna per te. –

risposta

63
using (FileStream stream = File.Open("path to file", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    using (StreamReader reader = new StreamReader(stream)) 
    { 
     while (!reader.EndOfStream) 
     { 

     } 
    } 
} 

FileAccess specifica cosa si desidera fare con il file. Il FileShare specifica cosa OTHERS può fare con il file mentre è in uso.

Nell'esempio precedente, è possibile aprire un file per la lettura mentre altri processi possono avere il file aperto per l'accesso in lettura/scrittura. Nella maggior parte dei casi, questo funzionerà per l'apertura dei file di registro che sono in uso.

+2

+1, l'unica risposta corretta qui. Specificare FileShare.ReadWrite è cruciale. L'altro processo ha già ottenuto l'accesso in scrittura, non puoi negarlo. –

+0

Grazie, ha funzionato perfettamente! – Feroc

+0

File.OpenRead lo fa all'interno. –

-2

Consiglio vivamente il numero BareTail, che viene utilizzato per esaminare tutti i nostri registri in tempo reale. Supporta anche l'evidenziazione, che è molto utile.

+0

hmmm ... sembra che OP voglia un modo programmatico per leggere il file quando è già aperto. = P – Dave

3

Utilizzare File.OpenRead(path), questo consente di accedere a un flusso in lettura al file; in questo modo non ti preoccuperai se un'altra applicazione ha un blocco di scrittura sul file.

+1

Non sempre vero, sto avendo problemi a leggere un file di registro bloccato e sto usando File.OpenRead –

+0

File.OpenRead non aprirà il file quando un'altra applicazione lo ha già aperto per la scrittura. La risposta di Tom Vervoort è corretta. – Wout

1

dipende, hai provato a leggere il file in sola lettura? utilizzando uno dei metodi statici

System.IO.File.ReadAllText(path) or System.IO.File.ReadAllLines(path) 

possono funzionare se il file non ci viene bloccato in modo esclusivo

3

Tu sei in balia del programma che sta scrivendo il file. In Windows, un processo può aprire un file per leggere, scrivere o entrambi, ma può anche controllare se altri processi possono aprire il file per leggere, scrivere o entrambi. Se l'altro processo ti ha negato il diritto di leggere il contenuto del file, allora non c'è nulla che tu possa fare al riguardo.

Se si controlla il codice sorgente del programma che sta scrivendo il file di registro, quindi modificarlo per consentire l'accesso in lettura da parte di altri processi.

Problemi correlati