سؤال

ولست بحاجة لكتابة أداة في C ++ لتحديد البتات التي تم تغييرها في ملف مقارنتها ملف آخر للنسخ المتماثل. ما هي أفضل طريقة لتحقيق ذلك؟

وأنا لم يكن لديك OS معين أو مكتبة في الاعتبار، وأنا مستعد لسماع الاقتراحات. هدفي الرئيسي هو الحد من مقدار حركة مرور الشبكة تشارك في النسخ المتماثل.

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

المحلول

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

.

نصائح أخرى

إذا لا يمكنك استخدام رسينك كما هو، تحقق librsync . أنها قديمة، ولكن هو رمز سهلة القراءة وتحسين.

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

لتوليد بيانات الاختلاف فعالة، إلقاء نظرة على VCDIFF (RFC 3284) ثنائي ضغط الدلتا. واحد التنفيذ الجيد هو xdelta (www.xdelta.org). فمن السهل لتنفيذ فك / إلغاء ضغط إذا كنت تريد تجنب استخدام xdelta على الطرف المتلقي بسبب قضايا الترخيص. الكتابة الخاصة بك المولد VCDIFF فرق من شأنها أن تولد بيانات الاختلاف المدمجة هي أكثر تعقيدا (اعتقد تبحث عن كتل انتقل كمثال). الكثير

في VCDIFF يمكن أيضا أن تكون بيانات الاختلاف sourceless، وهذا يعني أنهم ضغط في الملف الهدف دون أي ملف المصدر (الملف الذي يتم تطبيق فرق) في متناول اليد - في VCDIFF ضغط ملف هو حالة خاصة من خلق مضغوط دلتا بين الملفين. وهذا مفيد لأنه يمكنك استخدام نفس الشكل بغض النظر عن ما إذا كانت الوجهة لديه نسخة من الملف.

وأود أن تبدأ من خلال محاولة بعض تنفيذ فرق ( http://en.wikipedia.org/wiki / الفرق )

واقتراح: استخدم دالة تجزئة والانقسام وقهر النهج لتضييق كتلة التغيير (ق). ليس بالضبط حل برهان تصادم، ولكن SHA-2 IMO يمكن أن تعمل من أجلك.

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