C# Coupe de Fichiers et les Coller dans le Nouveau Répertoire
Je suis en train de couper des fichiers d'un répertoire sur mon ordinateur et de le coller dans un nouveau répertoire à chaque fois qu'un fichier est créé dans ce répertoire spécifique. Je suis en train de regarder le répertoire pourrait-il être quelque chose de simple comme
if (e.ChangeType == System.IO.WatcherChangeTypes.Created)
{
//cut file
//paste into new directory
}
Vous devez vous connecter pour publier un commentaire.
D'abord une clarification "couper-coller" sont des termes de l'interface utilisateur. Dans le système de fichiers, il est appelé "déplacement" le fichier.
Deuxième, les suggestions pour utiliser le Fichier.MoveTo peuvent ne pas fonctionner comme vous le souhaitez. Le IO Watcher vous dira quand un fichier est créé, non pas quand il est fait en cours d'écriture. Si vous déplacez immédiatement un fichier, vous pouvez le tirer de dessous de l'écrivain. Cela pourrait entraîner une erreur dans le programme qui est écrit dans le fichier.
La façon correcte de faire ce que vous proposez, c'est d'attendre jusqu'à ce que le fichier a été fermé par le processus de l'écriture, puis de la déplacer.
Ont un look à la LockFileEx méthode dans MSDN. Vous pouvez l'utiliser pour bloquer jusqu'à ce que vous avez un verrou exclusif sur le fichier (ce qui se produira lorsque le processus d'écriture ferme le fichier). Puis déplacez le fichier avant de relâcher le verrou.
Enfin, vous ne voulez probablement pas à appeler
LockFileEx
, dans le dossier system watcher de rappel. Vous pourriez avoir à attendre très longtemps avant d'obtenir le verrou exclusif sur le fichier. Au lieu de cela, vous devriez file d'attente de la création des fichiers verrouillés et déplacé par un thread secondaire (ou le pool de threads).en effet, couper-coller est équivalent à se déplacer, donc
System.IO.Fichier.MoveTo()
devez gérer votre problème bienSi vous êtes simplement à la recherche pour le code à copier/coller, se pencher sur les méthodes: Système.IO.Fichier.Move() et du Système.IO.FileInfo.MoveTo(). Les deux font essentiellement la même chose.