11
votes

Copie de fichier atomique sous .NET

Je construis une application de serveur qui copie des fichiers à l'aide de la fonction System.IO.File.copy (...). Mes fichiers peuvent être assez importants, par conséquent, il a une chance équitable que si la machine se bloque, cela se produit pendant la copie.

Après avoir redémarré le service, je devrais pouvoir récupérer les tâches de copie et continuer. Comment puis-je détecter si une copie a été complétée avec succès ou interrompue par un crash de serveur?

Mon plan actuel consiste à copier les fichiers sur un nom temporaire et une fois la copie terminée le renommant au nom final. De cette façon, le nom de fichier est capable de transporter les informations de l'état sur l'accident.

Avez-vous de bonnes suggestions?

EDIT: OS cible est WIN2003, donc transactionnel NTFS n'est pas disponible


4 Réponses :



2
votes

Les versions plus récentes de Windows vous permettent d'utiliser Transactions . < / p>


0 commentaires

11
votes

D'autres ont suggéré des NTF transactionnelles qui conviennent bien si vous déployez sur Vista ou plus tard. Si vous devez prendre en charge XP (ou antérieur), le fichier temporaire suivi d'un geste (renommé) est la meilleure solution.

La réponse à cette question similaire fournit plus d'informations: atomicité de fichier.move


0 commentaires

1
votes

Check out Fond Service de transfert intelligent dans Windows Server 2003 . Il fournit le mécanisme des travaux, qui peuvent être mis en pause et repris même après le redémarrage.

Voici quelques échantillons comment l'utiliser avec .NET:

Écrire des applications de mise à jour automatique avec .NET et le service de transfert intelligent de fond API

Sharpbits.net - Wrapper pour API BITS


0 commentaires