2010-03-17 7 views
3

Comment déterminer lors de la copie de fichiers est terminée j'utilise C#Comment déterminer quand la copie de fichier est terminée?

modifier: nous copier des fichiers via le réseau d'un PC à un autre. ma tâche est de regarder le répertoire et de faire quelques actions après que les fichiers y ont été copiés.

+1

Quel code avez-vous à ce jour? Pourquoi pensez-vous que le fichier n'est pas entièrement copié? – Sjoerd

+0

Oui. La copie de fichier est une opération de blocage, ou? – TomTom

+0

Est-ce que System.IO.File.Copy() ne bloque pas jusqu'à la fin? – Bobby

Répondre

2

Vérifiez régulièrement la taille. Quoi qu'il en soit , je vous recommande d'utiliser CopyFileEx, qui a une fonction de progression (http://msdn.microsoft.com/en-us/library/aa363852(VS.85).aspx)

+0

J'ai pensé à cette idée avant. quand je devrais arrêter de vérifier. – user295518

+0

lorsque la taille est égale à la taille du fichier d'origine. – thelost

+0

Je devrais vous dire les gars avant que je copie le dossier d'un PC à l'autre par le biais du réseau. Je copie le fichier pas du code. – user295518

6

Si vous utilisez File.Copy() alors cette opération est terminée après fichier est réellement copié.

+1

Je copie des fichiers non du code. – user295518

1

Je suis tombé sur quelque chose de similaire récemment. J'utiliserais l'attribut d'écriture ouverte de File sur le fichier pour voir si vous pouvez écrire dans le fichier: par exemple. FileStream fs = f.OpenWrite();

si l'instruction ci-dessus fonctionne, alors le fichier n'est pas utilisé, c'est-à-dire que la copie est terminée.

+0

Eh bien, puis-je en quelque sorte manipuler avec la boîte de dialogue de copie de fichiers sur PC (pour déterminer quand il est fermé)? c.-à-d. N'utilisant pas watcher sur le répertoire cible – user295518

+0

Je ne sais pas si c'est la meilleure chose à faire. Pour commencer, vous devrez identifier le processus. Le processus de copie de fichiers relève de "Windows Explorer" (si vous utilisez le gestionnaire de tâches). À moins que quelqu'un sache comment obtenir le bon processus facilement. Une autre façon de faire est d'essayer de renommer le répertoire de destination (par exemple quelque chose comme Directory.Move()) si vous pouvez le faire alors le répertoire n'est pas utilisé et tous les fichiers ont été copiés dans le répertoire. thx – daehaai

3

Essayez de regarder FileSystemWatcher's Created event.

Quelques événements communs, tels que copier ou déplacer un fichier ou un répertoire, ne correspondent pas directement à un événement , mais ces événements ne provoquent événements à soulever. Lorsque vous copiez un fichier ou un répertoire , the system raises a Created event dans le répertoire pour lequel le fichier a été copié

+1

L'événement sera déclenché dès la création du fichier. Cela ne signifie pas que les données dans le fichier sont complètement écrites. – ata

Questions connexes