"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > ## كيف يمكنك نسخ الملفات المتفرقة دون توسيعها في Go؟

## كيف يمكنك نسخ الملفات المتفرقة دون توسيعها في Go؟

تم النشر بتاريخ 2024-11-08
تصفح:648

## How Do You Copy Sparse Files Without Expanding Them in Go?

تصبح الملفات المتفرقة هائلة مع io.Copy ()

المشكلة

عند نسخ الملفات المتفرقة باستخدام io.Copy ()، غالبًا ما تتضخم كبير الحجم في الوجهة.

فهم طبيعة الملفات المتفرقة

io.Copy() ينقل البايتات الأولية، التي تخفي وجود ثغرات في ملف متفرق - المساحات التي لا توجد فيها بيانات يقيم في الواقع. لا يمكن الوصول إلى هذه المعلومات من خلال مكالمات النظام القياسية مثل القراءة (2). على هذا النحو، io.Copy() غير قادر على الحفاظ على تناثر الملفات.

معالجة المشكلة

لمعالجة هذا، نحتاج إلى التعمق أكثر باستخدام حزمة syscall والمعالجة اليدوية. يمكن استخدام استدعاءات نظام Lseek(2)، مع قيم SEEK_HOLE وSEEK_DATA الخاصة، لمعالجة الثغرات الموجودة في الملفات.

التنفيذ

  1. استخدم syscall.Seek () للتحكم في الموقع داخل الملف.
  2. حدد قيم SEEK_HOLE وSEEK_DATA الخاصة بالنظام الأساسي المستهدف.
  3. اقرأ من المناطق التي تحتوي على البيانات وتجاهل مناطق الثقب.

اعتبارات متفرقة نقل الملفات

إذا كنت تريد الحفاظ على تناثر الملف أثناء النقل، فإن الوضع أكثر تعقيدًا. يمكن استخدام Fallocate(2) لمحاولة إنشاء الثغرة في أنظمة الملفات المدعومة. ومع ذلك، فإن بعض أنظمة الملفات تفتقر بطبيعتها إلى دعم الثقب، مثل عائلة FAT.

ملاحظات إضافية

  1. تحقق مما إذا كان دليل المصدر والوجهة موجودين في نفس نظام الملفات. إذا كان الأمر كذلك، فإن استخدام syscall.Rename() أو os.Rename() بدلاً من النسخ يمكن أن يحافظ على حجم الملف وسماته.
  2. ارجع إلى إصدار Go رقم 13548 للحصول على مزيد من المعلومات حول التعامل مع الملفات المتفرقة في ملفات tar.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3