2011-01-10 3 views
0

De quoi faut-il faire attention lors de la création d'une méthode pour déplacer (couper) un lot de fichier d'un répertoire à un autre?Manière sûre de déplacer par programme un lot de fichier?

Supposons que la signature de la méthode soit Move(filter, sourceFolder, destinationFolder, overwrite). De quoi ai-je besoin pour éviter le risque de perte de données, en particulier lorsque l'écrasement du fichier d'origine et la suppression du fichier source sont pris en compte? Plusieurs scénarios possibles dont je suis inquiet: une erreur se produit lorsqu'un déplacement est en cours, déplacé un fichier mais le fichier est en quelque sorte corrompu, supprimé un fichier homonyme afin de permettre au nouveau fichier de se déplacer mais une erreur se produit lors du déplacement le nouveau fichier, etc.

J'utilise l'espace de noms System.IO de .net pour les opérations de déplacement.

+0

Êtes-vous en mesure d'utiliser des transactions? – Gabe

+0

que sont les transactions? –

+0

Voici une description de NTFS transactionnel: http://msdn.microsoft.com/en-us/magazine/cc163388.aspx – Gabe

Répondre

0

Sans transactions, le moyen le plus sûr est de copier, vérifier, puis supprimer. C'est à vous de décider si vous voulez vous déplacer par fichier (c'est comme ça que Windows le fait, une opération de déplacement peut échouer en laissant la moitié des fichiers déplacés) ou de ne permettre que le lot entier, ou aucun.

Vous devez prendre des décisions sur la façon de répondre aux fichiers qui ont été modifiés pendant le déplacement, aux fichiers sources qui ne peuvent pas être supprimés par la suite ou aux fichiers de destination déjà ouverts lorsque vous effectuez une restauration.

+0

IMO, un inconvénient de cette approche est qu'une copie est plus lente qu'un mouvement (généralement instantané) –

+0

Vrai, mais sans certaines transactions, le retour d'un mouvement partiellement réussi peut être difficile. Ce n'est pas que "mon" méthode de déplacement garantit un déplacement ou une restauration propre - cela garantit simplement que l'ensemble du mouvement réussit, ou échoue mais laisse les fichiers source intacts. –

Questions connexes