Domanda

sto usando ReadDirectoryChangesW per spiare una cartella, se sto copia di un file di grandi dimensioni nella cartella, posso ricevere più messaggi FILE_ACTION_MODIFIED, sembra ogni volta di Windows scrive un grande pezzo del file, si ottiene il file modificato notifica per ogni volta. Ho cercato di utilizzare CreateFile API per verificare se il file può aprire da AP o no, ma qualche volta, alcuni dei file sono sempre bloccati da altri AP, per esempio, se si sta aprendo l'Outlook, il PST verrà aggiornato, ma il mio AP può 't accedervi, dobbiamo iniziare shadow Copy per aprirlo. Quindi la mia domanda è, come conoscere un file è terminata la copia?

È stato utile?

Soluzione

Si tratta di una soluzione di natura molto hacky, ma in una situazione molto peloso è possibile eseguire un ciclo di polling per verificare le dimensioni (o data di modifica) del file. Se non cambia per un po ', è possibile un po' tranquillamente supporre che il file è terminata la copia.

EDIT: Questa non è la soluzione ottimale nel caso medio, ma si consideri che nel caso del PO soluzioni migliori sono escluse dai vincoli del problema. Pensate a questo prima di pensare di downvoting.

Altri suggerimenti

Quando si sondaggio per la dimensione del file, non utilizzare _stat/_stat64. Invece, aprire il file ogni volta che è necessario e chiamare _filelengthi64 per ottenere la dimensione del file. La dimensione del file che viene restituito dal _stat64 non viene aggiornato in tempo reale dal sistema operativo di Windows. Inoltre essendo in grado di aprire il file, si esegue il test per vedere che tutte le operazioni di copia lunghe sono state completate.

Windows fornisce un'API per il monitoraggio aggiornamento contenuto della directory. È possibile utilizzare l'evento creato per rilevare nuovo file, ma essere consapevoli che questa cottura evento non significa necessariamente che il file è ancora stato rilasciato.

C ++ nativo specifiche e codice di esempio:

http://msdn.microsoft.com/ it-it / library / aa365261 (VS.85) aspx

.net:

http://msdn.microsoft.com/en- us / library / system.io.filesystemwatcher.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top