NET ile NTFS Dosya Sistemi İşlemlerini Planlama | sıcak çevrimiçi

Womanne

Member
Windows NT 6.0’dan (yani Windows Vista ve Windows Server 2008) başlayarak, Windows NTFS dosya sistemi atomik işlemleri destekler. İşlemsel Dosya Sistemi (İşlemsel NTFS olarak da bilinir, TxF kısaltması), örneğin, bir dosya yazılırken bir programın çıkması nedeniyle dosya sisteminde yarım kalmış veya tutarsız bir dosyanın kalmasını önlemek için kullanılabilir. Tutarlı bir şekilde birden fazla dosya yazmak da sağlanabilir.

Duyuru



TxF, uzun süredir mevcut olan Microsoft Dağıtılmış İşlem Koordinatörü’ne (MSDTC) entegre olan Kernel Transaction Manager’ı (KTM) kullanır. Bununla, dosya sistemini, veritabanlarını ve Windows kayıt defteri veritabanını (İşlemsel Kayıt Defteri) kapsayan işlemler oluşturabilirsiniz. Birden çok bilgisayardaki dosya sistemindeki değişiklikler bile bir işlem olarak eşlenebilir.

programlama arayüzü


Ne yazık ki, .NET Framework’te TxF için doğrudan destek yoktur. Programlama arabirimi yalnızca Microsoft’tan C++ düzeyinde resmi olarak edinilebilir. Kernel32.dll kullanılabilir (örn. işlevler aracılığıyla CreateFileTransacted(), CopyFileTransacted(), DeleteFileTransacted() Vesaire.).

Ancak, Transactional NTFS Managed Wrapper adlı C# dilinde yazılmış bir açık kaynak sarıcı kitaplığı vardır. Bununla, .NET kitaplığı tarafından sağlanan zarif işlem desteğini kullanabilirsiniz. Sistem.İşlemler kullanmak.

ne zaman kullanılır Sistem.İşlemler bir örneğidir System.Transactions.TransactionScope yaratmak. işlemin başarılı (commit) olduğu kabul edilir. Tamamlamak()yöntem denir. İstek İşlem kapsamı çağrılmadan yok edildi Tamamlamak(), Örneğin. B. Bir çalışma zamanı hatası oluştuğundan, işlemin başarısız olduğu (iptal edildiği) kabul edilir. Üretimi dahilindeki tüm eylemler İşlem kapsamı ve bu eylem için bir işlem yöneticisi varsa, taahhüt/iptal işlemi otomatik olarak işlemin bir parçası haline gelir. Başlatılması gereken bir Windows sistem hizmeti olan MSDTC, işlemin yürütülmesinden sorumludur.

Örnek


Aşağıdaki kod parçacığı (World Wide Wings .NET örnek olay incelemesinden), İşlem kapsamı bir Hakkında {} kullanarakbir iş mantığı yönteminde C#’ta blok. Blok içinde, iki veri erişim katmanı yöntemi çağrılır (KareSayısını Azalt() VE Rezervasyon Oluştur()). NTFS dosya sisteminde bir günlük dosyası da oluşturulur. Yalnızca üç eylem de başarılı olursa arama gerçekleşir Tamamlamak(). Ancak o zaman veri tabanında ve dosya sisteminde oluşturulan dosyada yapılan değişiklikler kesinleşir.

/// <summary>
/// Flugbuchung erstellen
/// </summary>
public string NewBuchung(int FlugNummer, int PassagierNummer)
{
try
{
string Buchungscode = FlugNummer.ToString() + "-"
+ PassagierNummer.ToString();
// Transaktion, nur erfolgreich wenn Platzanzahl
// reduziert und Buchung erstellt!
using (System.Transactions.TransactionScope t
= new System.Transactions.TransactionScope())
{
// hier erfolgen Änderungen in Datenbanken über
// zwei Methoden der Datenzugriffsschicht
if (!FlugDZS.ReduzierePlatzAnzahl(FlugNummer, 1))
return "Kein Platz auf diesem Flug vorhanden!";
if (!BuchungsDZS.ErzeugeBuchung(PassagierNummer,
FlugNummer)) return "Buchung nicht möglich!";

// Protokolldatei im NTFS-Dateisystem schreiben (als Teil
// der Transaktion)
string Path = @"t:buchungen" + Buchungscode + ".txt";
FileStream fs = TransactedFile.Open(Path,
System.IO.FileMode.CreateNew, System.IO.FileAccess.Write,
System.IO.FileShare.None);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now + ";" + Buchungscode + ";"
+ FlugNummer + ";" + PassagierNummer);
sw.Close();
fs.Close();

// Transaktion erfolgreich abschließen
t.Complete();

// Buchungscode zurückgeben
return Buchungscode;
}
}
catch (Exception ex)
{
return "Fehler: " + ex.Message;
}
}


()






Haberin Sonu
 
Üst