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

كيفية ضغط محتوى المجلد بدون المجلد الجذر في Go؟

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

How to Zip Folder Content Without the Root Folder in Go?

ضغط المحتوى داخل مجلد بدون المجلد الجذر

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

يحاول المقتطف المقدم تحقيق ذلك عن طريق تعيين اسم الرأس باستخدام ما يلي السطر:

header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
ومع ذلك، يضيف هذا الرمز الدليل الأساسي (على سبيل المثال، "dir1") إلى المجلد اسم الرأس، مما يؤدي إلى إنشاء أرشيف حيث تكون الملفات متداخلة داخل بنية الدليل.

لمعالجة هذه المشكلة، يجب استبدال السطر بـ ما يلي:

header.Name = strings.TrimPrefix(path, source)
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
يؤدي هذا إلى إزالة الدليل الأساسي من اسم الرأس، مما يضمن استخراج الملفات بدون بنية الدليل.

سيبدو الكود المعدل كما يلي:

import ( "أرشيف/الرمز البريدي" "إف إم تي" "آيو" "نظام التشغيل" "المسار/مسار الملف" ) func Zipit (المصدر، السلسلة المستهدفة) خطأ { ملف مضغوط، خطأ: = os.Create(الهدف) إذا أخطأت!= لا شيء { خطأ العودة } تأجيل ملف zip.Close() الأرشيف := zip.NewWriter(zipfile) تأجيل الأرشيف.إغلاق() معلومات، خطأ := os.Stat(مصدر) إذا أخطأت!= لا شيء { العودة لا شيء } filepath.Walk(source, func(path string, info os.FileInfo, err error) خطأ { إذا أخطأت!= لا شيء { خطأ العودة } رأس، خطأ:= zip.FileInfoHeader(info) إذا أخطأت!= لا شيء { خطأ العودة } إذا كانت المعلومات.IsDir() { اسم الرأس = "/" } آخر { header.Method = zip.Deflate } الكاتب، يخطئ:= archive.CreateHeader(header) إذا أخطأت!= لا شيء { خطأ العودة } إذا كانت المعلومات.IsDir() { العودة لا شيء } الملف، خطأ: = os.Open(مسار) إذا أخطأت!= لا شيء { خطأ العودة } تأجيل الملف.إغلاق() _، يخطئ = io.Copy (كاتب، ملف) خطأ العودة }) خطأ العودة } الوظيفة الرئيسية () { يخطئ:= Zipit("path/dir1" "/"، "اختبار" ".zip") إذا أخطأت!= لا شيء { FMT.Println (يخطئ) }
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
يقوم هذا الرمز بضغط المحتوى بشكل فعال داخل الدليل "dir1" دون تضمين الدليل نفسه في ملف ZIP.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3