2010-09-03 19 views
5

Ho una discussione che esegue il polling di una cartella per i nuovi file. Il problema è che vede un nuovo file e inizia a lavorarci anche prima che il file sia stato copiato completamente da un altro processo. Per questo motivo il poller ottiene il file utilizzato da un altro errore di processo.Come aspettare che un file sia copiato completamente?

C'è un modo per verificare che il file sia libero di utilizzare o ricevere notifiche? Possiamo certamente usare il codice di gestione delle eccezioni, ma c'è un modo migliore?

Tech: NET 2.0/C#

Aggiornamento:

  • Scoperto da altre risposte che, se abbiamo accesso al app scrivere il file quindi una migliore progettazione è quello di iniziare con qualche altra estensione .tmp e quindi rinominarlo dopo la copia.

  • Il FileStream.Lock potrebbe essere utilizzato se non controlliamo l'applicazione di origine

+2

Vedere http://stackoverflow.com/questions/750471/how-to-know-whether-a-file-copying-is-in-progress-complet-in-java-1-6/750521#750521 per alcune risposte generali Potrebbe esserci qualcosa di meglio per una piattaforma specifica (ad esempio Windows .NET) ma la risposta di cui sopra ha due soluzioni generali al problema. – paxdiablo

risposta

2

Abbiamo tentativo di ottenere un blocco sul file prima di elaborare e gestire l'IOException piuttosto che un'eccezione generica durante il tentativo di leggere il file.

Vedere FileStream.Lock su MSDN.

+0

Grazie. Sembra un'idea migliore. – thewpfguy

Problemi correlati