كيف يمكنني الرمز البريدي دليل من الملفات باستخدام C++?

StackOverflow https://stackoverflow.com/questions/505863

سؤال

أنا أعمل على مشروع باستخدام C++, زيادة, Qt.أنا أفهم كيفية ضغط الملفات واحد و bytestreams باستخدام ، على سبيل المثال ، qCompress() وظيفة في كيو تي.

كيف يمكنني الرمز البريدي دليل من ملفات متعددة ، بما في ذلك الدلائل?أنا أبحث عن عبر منصة (ماك, الفوز, لينكس) الحل ؛ لا أفضل لاطلاق النار قبالة مجموعة من العمليات الجديدة.

هل هناك طريقة قياسية الجمع بين bytestreams من العديد من الملفات في أرشيف مضغوط, أو ربما هناك راحة وظيفة أو الطريقة التي سوف تكون متاحة في تعزيز iostream المكتبة ؟

شكرا جزيلا على المساعدة.

التحديث:على QuaZip مكتبة تبدو كبيرة حقا.هناك على سبيل المثال في حزمة التنزيل (في "الاختبارات" dir) الذي يظهر بشكل واضح جدا كيفية الرمز البريدي دليل الملفات.

تحديث 2:بعد الانتهاء من هذه المهمة على لينكس بناء البيئة ، اكتشفت أن QuaZip لا تعمل مع برنامج التحويل البرمجي Visual Studio.قد يكون من الممكن معالجة كل تلك أخطاء برنامج التحويل البرمجي ، ولكن كلمة تحذير إلى أي شخص يبحث في هذا الطريق.

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

المحلول

لقد وجدت اثنين التالية المكتبات:

  • ZipIOS++.يبدو أن "نقية" C++.لا قائمة ويندوز صراحة كما المدعمة.لذلك أعتقد أن عليك أن تجرب حظك نفسك.
  • QuaZIP.بناء على Qt4.في الواقع تبدو لطيفة.أنها قائمة ويندوز صراحة (باستخدام مينغو).على ما يبدو هو C++ المجمع على [هذا] المكتبة.

آه, وبطبيعة الحال, لقد مزقت تلك المواقع من هذا Qt Mailinglist سؤال حول فتح سوستة/حيويي من الدلائل :)

نصائح أخرى

وفقط للسجل ...

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

وانتهى الأمر باستخدام Minizip المكتبة. هو مكتوب في سهل C، ولكن ابتكار C ++ بسيط المجمع حوله نسيم، والنتيجة النهائية يعمل كبيرة، على الأقل لأغراض بلدي.

حاولت QuaZIP 0.4.3 على ويندوز مع visual studio 2010 -- لا تزال هناك مسائل لا يمكن حلها بسهولة.

لبناء VS:

  1. استخدام CMake إلى تكوين وتوليد مقابل حل QuaZIP.
  2. فتح soltion مع VS وبناء-عليك أولا لاحظ أنه لا يمكن العثور على 'zlib.ح'.
  3. فتح تفضيلات quazip المشروع إضافة المسار إلى Qt نسخة من Zlib C/C++->عام->إضافية تشمل الدلائل:$(QTDIR)/src/3rdparty/zlib.
  4. إعادة بناء مرة أخرى وسوف تحصل على الكثير من التحذيرات خطأ واحد C2491:dllimport ثابت المسألة على QuaZipFile::staticMetaObject.
  5. وهذا لأن QuaZipFile وأعلن مثل "الطبقة QUAZIP_EXPORT QuaZipFile" و QUAZIP_EXPORT يحتاج إلى حل Q_DECL_EXPORT dll و Q_DECL_IMPORT للتطبيق ، استنادا إلى ما إذا كان QUAZIP_BUILD يعرف أو لا.عند بناء QuaZIP QUAZIP_BUILD يجب أن تكون محددة ولكن ليس عملية التكوين يحدد في خطأ عديمة الفائدة تماما "quazip_EXPORTS" بدلا من ذلك.
  6. إلى إصلاح فقط إزالة "quazip_EXPORTS" من جميع بناء تكوينات إضافة QUAZIP_BUILD بدلا من ذلك -- QuaZIP الآن بناء ما يرام.

ولقد بنيت التفاف حول minizip إضافة بعض الميزات التي كنت بحاجة وجعلها أجمل لاستخدامها. هو لا تستخدم أحدث ج ++ 11 وتم تطويرها باستخدام Visual Studio 2013، لذلك يجب أن تعمل خارج نطاق فإن صندوق بالنسبة لك.

وهناك وصفا كاملا هنا: https://github.com/sebastiandev/zipper

ويمكنك الرمز البريدي مجلدات بأكملها، والجداول، وناقلات، وما إلى ذلك أيضا ميزة لطيفة تفعل كل ما هو تماما في الذاكرة.

system("zip myarchive.zip *");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top