ج# - Autozip الملفات في مجلد على أساس السنة-الشهر

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

  •  05-07-2019
  •  | 
  •  

سؤال

وكلفت الحد من ملف server استخدام معدل لذا أود أن أقوم بدوري بلدي ضغط الملفات القديمة(أي Excel/Access/Txt).

لدينا بعض المجلدات التي تحتوي على الآلاف من الملفات لذلك أنا لا أريد فقط الرمز البريدي الدليل بأكمله في ملف واحد كبير - سيكون من الأفضل أن يكون عدد من ملفات أصغر بحيث يكون من الأسهل بالنسبة للمستخدم العثور على البيانات " دلو " أنهم يبحثون عن.

هل هناك طريقة باستخدام C# من خلال قراءة دليل الرمز البريدي الملفات في السنة-شهر مجموعات (كل الملفات من السنة-الشهر وضعها معا في واحد مضغوط)?

أو سيكون من الأفضل استخدام برنامج نصي مثل AutoIT?

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

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

المحلول

وايم ليس متأكدا مما إذا كان سؤالك عن فتح سوستة، واختيار الملفات من معين السنة / الشهر أو كليهما.

وعن فتح سوستة بيتر سبق ذكرها 7 الرمز البريدي وSharpZipLib. لدي خبرة شخصيا الوحيدة مع هذا الأخير ولكن في كل إيجابية، من السهل التعامل معها.

وعن تجميع الملفات الخاصة بك يمكن أن يتم ذلك عن طريق بالتكرار كل الملفات في مجلد وتجميعها من قبل أي من هناك خلقت التاريخ أو تاريخ التعديل الأخير.

والزائفة:

var files = new Dictionary<DateTime, IList<string>>();
foreach (var file in Directory.GetFiles(...)) {
   var fi = new FileInfo(file);
   var date = fi.CreatedDate();
   var groupDate = new DateTime(date.Year, date.Month);

   if (!files.ContainsKey(groupDate)) files.Add(groupDate, new Collection<string>());

   files[groupDate].Add(file);
}

والآن يجب أن يكون لديك قاموس يحتوي على العام متميزة مفاتيح الشهر / ومفتاح foreach قائمة من الملفات التي تنتمي إلى هذه المجموعة. وذلك لفتح سوستة

والزائفة:

foreach (var entry in files) {
   var date = entry.Key;
   var list = entry.Value;

   // create zip-file named date.ToString();
   foreach (var file in list) {
      // add file to zip
   } 
}

نصائح أخرى

وبالتأكيد يمكنك القيام بذلك مع قليل من C # والمكتبات مثل 7 الرمز البريدي SharpZipLib .

هل يمكن استخدام النظام.IO.الدليل.GetFiles() إلى حلقة من خلال الملفات على كل دليل ، تحليل من قبل اسم الملف وإضافتها إلى 7-zip أو SharpZipLib الكائن.إذا كان الآلاف من الملفات قد يكون من الأفضل رميها في الخدمة أو من نوع ما على تشغيل المهمة المجدولة بين عشية وضحاها حتى لا ضريبة fileshare.

حظا سعيدا لكم !

تحرير: كإضافة هل يمكن استخدام النظام.IO.FileInfo كائن لكل ملف إذا كنت تحتاج إلى تحليل من تاريخ الإنشاء أو ملف آخر attirbutes.

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