146 messaggi dal 05 maggio 2005
Ciao a tutti,
dovrei leggere un file con un servizio ma prima di leggerlo devo controllare che la copia dello stesso sia conclusa.

Mi sapete indicare il metodo migliore per procedere?

Grazie,
Atropo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
il programma che scrive il file potrebbe crearlo con un nome temporaneo, e poi rinominarlo al termine della scrittura. Così sai che, se il file esiste con il suo nome definitivo, è stato indubbiamente scritto del tutto.

Oppure ho visto delle applicazioni creare un secondo file, per esempio con estensione .lock. La sua presenza indica che il file principale è in corso di scrittura. Quando il file lock sparisce, allora è il momento di leggere il file.
Se usi un ciclo while per controllare la presenza del file lock, metti un'istruzione Thread.Sleep tra un'iterazione e l'altra altrimenti saturi le risorse. Oppure usa il FileSystemWatcher (meglio) e sottoscrivi il suo evento Changed.

Oppure, un'altra soluzione è quella di tentare di aprire il file in scrittura e vedere se si verifica una IOException. Perché... se si verifica, vuol dire che il file era in corso di scrittura. Cerca di evitare questa soluzione, qui trovi alcune considerazioni.
http://stackoverflow.com/questions/1304/how-to-check-for-file-lock-in-c

ciao

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.