2010-02-18 3 views
13

Ich habe TransactionScope verwendet, um mit der Datenbank zu arbeiten, und es fühlt sich gut an. Was ich suche ist die folgende:TransactionScope mit Dateien in C#

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

aber offensichtlich funktioniert das nicht - wenn es 20-Dateien sind, und eine Ausnahme auftritt, auf der 9. Datei, die alle vorherigen 8 bleiben geändert und die Rest unverändert - Rollback wird nicht durchgeführt. Also, was wäre der beste Weg, um ein bereichsähnliches Verhalten für Dateien zu implementieren?

Ich hoffe, es gibt eine einfache Antwort, aber wenn nicht, könnten Sie mir nur ein paar Hinweise geben, oder zeigen Sie mich auf einen verwandten Artikel?

Antwort

6

Sie suchen nach Transactional NTFS, eingeführt von Windows Vista.

Here is a managed wrapper.

+0

Danke, das scheint genau das zu sein, wonach ich gesucht habe. – avance70

+2

Leider verwaltet ihr verwalteter Wrapper jede Funktion in einem eigenen Transaktionsbereich. Ich musste Überladungen schaffen, die es mir erlaubten, meinen eigenen Umfang zu überschreiten. –

+3

Just FYI, Microsoft erwägt, Transaktions-NTFS abzulehnen. http://msdn.microsoft.com/en-us/library/windows/desktop/hh802690%28v=vs.85%29.aspx – Nathan

3

Sie können die auf Codeplex und NuGet verfügbare Bibliothek .NET Transactional File Manager ausprobieren. Es unterstützt jedes Dateisystem und ist kein Wrapper über Transactional NTFS.

Aus der Projektbeschreibung:

Transactional File Manager ist eine .NET-API, die Datei Systemoperationen wie Kopieren von Dateien einschließlich unterstützt, verschieben, löschen, hängen usw. in einer Transaktion. Es ist eine Implementierung von System.Transaction.IEnlistmentNotification (arbeitet mit System.Transactions.TransactionScope).