2010-02-18 15 views
13

He estado usando TransactionScope para trabajar con la base de datos y me parece agradable. Lo que estoy buscando es el siguiente:TransactionScope con archivos en C#

using(var scope=new TransactionScope()) 
{    
    // Do something with a few files... 
    scope.Complete(); 
} 

pero obviamente esto no funciona - si hay 20 archivos, y se produce una excepción en el archivo noveno, todos los anteriores 8 permanecen cambió y la rest sin cambios - no se realiza ninguna retrotracción. Entonces, ¿cuál sería la mejor manera de implementar un comportamiento similar a un alcance para los archivos?

Espero que haya una respuesta simple, pero si no, ¿podría darme algunos consejos o indicarme un artículo relacionado?

Respuesta

6

Está buscando Transactional NTFS, introducido por Windows Vista.

Here is a managed wrapper.

+0

Gracias, eso parece ser exactamente lo que estaba buscando. – avance70

+2

Desafortunadamente, su envoltura administrada envuelve cada función en un ámbito de transacción propio. Tuve que crear sobrecargas que me permitieron pasar en mi propio alcance. –

+3

Solo para su información, Microsoft está considerando cancelar el NTFS transaccional. http://msdn.microsoft.com/en-us/library/windows/desktop/hh802690%28v=vs.85%29.aspx – Nathan

3

Puede probar la biblioteca .NET Transactional File Manager disponible en Codeplex y NuGet. Es compatible con cualquier sistema de archivos y no es un contenedor sobre Transactional NTFS.

De la descripción del proyecto:

transaccional Administrador de archivos es una API .NET que soporta archivos incluyendo las operaciones del sistema, tales como copia de archivos, mover, borrar, añadir, etc., en una transacción . Es una implementación de System.Transaction.IEnlistmentNotification (funciona con System.Transactions.TransactionScope).

Cuestiones relacionadas