سؤال

يجب تطبيق تعديل 5 متطابقة ملفات xml بعضها يقع على مشاركة شبكة اتصال.وأنا أدرك أن هذا هو داع زائدة ، ولكن "يجب أن يكون الأمر كذلك."

في كل مرة يعمل هذا التطبيق بالضبط عنصر واحد (لا أكثر ولا أقل) سيتم إضافة/إزالة/تعديل.

في البداية, تطبيق يفتح كل ملف xml, إضافة/إزالة/تعديل عنصر عقدة المناسبة و يحفظ الملف أو يلقي خطأ إذا كان لا يمكن (غير قادر على الوصول إلى مشاركة شبكة اتصال, مهلة, الخ...)

كيف يمكنني جعل هذه الذرية?

بلدي الافتراض الأولى هو:

foreach (var path in NetworkPaths)
    if (!File.Exists(path)
        isAtomic = false;

if (isAtomic)
{
    //Do things
}

ولكن أستطيع أن أرى ذلك فقط حتى الآن.هل هناك طريقة أخرى للقيام بذلك ، أو اتجاه لا يمكن أن يشير إلى ؟

هل كانت مفيدة؟

المحلول

ولسوء الحظ، من أجل أن يكون حقا "الذري" ليس من الممكن حقا. سيكون أفضل نصيحتي أن يكون لاختتام شكل الخاص بك من المعاملات لهذا، لذلك يمكنك على الأقل التراجع عن التغييرات.

وكنت تفعل شيئا مثل الاختيار لكل ملف - إذا كان أحد لا وجود لها، ورمي

والنسخ الاحتياطي كل ملف، حفظ الدولة بحاجة إلى التراجع، أو حفظ نسخة في الذاكرة لو لم تكن ضخمة. إذا كنت لا تستطيع، ورمي.

تأكد تعديلاتك، ثم حفظ الملفات. إذا كنت تحصل على الفشل هنا، في محاولة لاستعادة من كل من النسخ الاحتياطية. سوف تحتاج إلى القيام ببعض معالجة الأخطاء هنا حتى لا رمي حتى أعيدت جميع النسخ الاحتياطي. بعد استعادة، ورمي استثناء الخاص بك.

وعلى الأقل بهذه الطريقة، سوف تكون أكثر عرضة لعدم إجراء تغيير على مجرد ملف واحد. نأمل، إذا كنت تستطيع تعديل ملف واحد، عليك أن تكون قادرا على استعادته من النسخة الاحتياطية / التراجع عن التعديل الخاص بك.

نصائح أخرى

أقترح الحل التالي.

  • محاولة فتح جميع الملفات مع كتابة قفل.
    • إذا كان واحد أو أكثر تفشل العملية.
    • تعديل و مسح جميع الملفات.
      • إذا كان واحد أو أكثر تفشل لفة بالفعل تعديل تلك العودة وإخراجهم مرة أخرى.
  • إغلاق كافة الملفات.

إذا كان التراجع فشل ...حسنا ...حاول مرة أخرى وحاول مرة أخرى وحاول مرة أخرى ...والتخلي في inconsitent الدولة.

إذا كان لديك السيطرة على جميع عمليات كتابة هذه الملفات ، يمكنك تطبيق بسيط باستخدام آلية قفل قفل الملف.حتى يمكن أداء الكتابة قبل تسجيل الدخول و سجل التغيير المقرر في قفل الملف.إذا تعطل عملية واحدة القادم في محاولة لتعديل ملفات من شأنها الكشف عن العملية غير مكتملة ويمكن أن يستمر ذلك قبل القيام بذلك هو تعديل واحد.

أود أن أعرض الإصدارات من الملفات.يمكنك القيام بذلك بسهولة عن طريق إضافة لاحقة إلى اسم الملف.هـ.ز متغير العداد.عملية القارئ على النحو التالي:

  • إعداد الإصدار التالي من الملف
  • الكتابة إلى ملف مؤقت مع اسم مختلف.
  • الحصول على أعلى رقم الإصدار
  • زيادة هذا الإصدار من جانب واحد
  • إعادة تسمية الملف المؤقت إلى ملف جديد
  • حذف الملفات القديمة (يمكنك الاحتفاظ مثلا2 منهم)

القارئ تفعل - العثور على الملف مع أعلى الإصدار - قراءة عليه

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top