Transactional NTFS (partie 1/2)


Transactional NTFS et DotNet

Microsoft introduit un concept intéressant à partir des versions de Windows Vista et Server 2008.
Cette nouveauté est appelée Transactional NTFS (TxF).
Elle permet aux développeurs d’écrire des fonctions d’Entrée/Sortie garantissant le succès complet ou le rejet complet en cas d’erreur d’un ensemble d’opérations.

Malheureusement il n’existe pas de classe DotNet(au moins jusqu’à la version 3.5 SP1) permettant de manipuler simplement ce type d’opérations.

Pour manipuler ces opérations, nous avons besoin de passer par le P/Invoke pour utiliser ces fonctions :

CreateTransaction, CommitTransaction, RollbackTransaction et DeleteFileTransacted


Notez que j’utilise SafeFileHandle dans la signature des méthodes à la place de IntPtr pour les ancienne ressources non managées afin de garantir que les éléments seront bien libérés même si l’application doit s’arrêter.

L’étape suivante est la définition d’une classe permettant d’appeler simplement les fonctions déclarées.


Exemple avec la suppression de 2 fichiers

 

Supposons que nous devons supprimer automatiquement 2 fichiers. Les 2 fichiers doivent être supprimés en même temps. Si un des 2 fichiers ne peut pas être supprimé, les 2 fichiers doivent être conservés.

La méthode DeleteFile marque le fichier pour la suppression dans le transaction courante, mais ne la supprimera uniquement si la méthode Commit est appelée.

Grâce à TFX et les transactions distribuées, les opérations sur les fichiers et les opérations SQL peuvent s’effectuer dans une même opération.

Dans la 2ème partie, nous verrons comment utiliser la fonction CreateFileTransacted pour traiter de façon unique la lecture et l’écriture d’un fichier.

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *