If you happen to be on a Windows Vista or Windows Server 2008 box, there is some goodness going your way.
There is a basic managed TxF (Transactional NTFS) wrapper available (unveiled by Jason Olson).
What this thing gives you is this:
try{ using (TransactionScope tsFiles = new TransactionScope TransactionScopeOption.RequiresNew)) { WriteFile("TxFile1.txt"); throw new FileNotFoundException(); WriteFile("TxFile2.txt"); tsFiles.Complete(); }}catch (Exception ex){ Console.WriteLine(ex.Message);}
WriteFile method that does, well, file writing, is here:
using (TransactionScope tsFile = new TransactionScope (TransactionScopeOption.Required)){ Console.WriteLine("Creating transacted file '{0}'.", filename);
using (StreamWriter tFile = new StreamWriter(TransactedFile.Open(filename, FileMode.Create, FileAccess.Write, FileShare.None))) { tFile.Write(String.Format("Random data. My filename is '{0}'.", filename)); }
tsFile.Complete(); Console.WriteLine("File '{0}' written.", filename);}
So we have a nested TransactionScope with a curious type - TransactedFile. Mind you, there is support for TransactedDirectory built in.
What's happening underneath is awesome. The wrapper talks to unmanaged implementation of TxF, which is built in on every Vista / Longhorn Server box.
What you get is transactional file system support with System.Transactions. And it's going to go far beyond that.
I wrote some sample code, go get it. Oh, BTW, remove the exception line to see the real benefit.
Download: Sample code
This sample is provided without any warranty. It's a sample, so don't use it in production environments.
Remember Me
The opinions expressed herein are my own personal opinions and do not represent my company's view in any way.
My views often change.
This blog is just a collection of bytes.
Copyright © 2003-2024Matevž Gačnik
E-mail