繁体   English   中英

C#-根据年份-月份自动压缩文件夹中的文件

[英]C# - Autozip files in a folder based on Year-Month

IT部门的任务是降低文件服务器的使用率,因此我想尽我所能来压缩旧文件(即Excel / Access / Txt)。

我们有一些包含数千个文件的文件夹,所以我不想只是将整个目录压缩到一个大文件中-最好有多个较小的文件,这样用户可以更轻松地找到数据他们正在寻找的“桶”。

有没有一种使用C#的方法来读取目录并将文件压缩为年月组(将年月中的所有文件放在一个zip中)?

还是使用像AutoIT这样的脚本会更好?

还是已经存在执行此操作的程序,因此我无需编写任何代码?

我不确定您的问题是关于压缩,从特定年份/月份中选择文件还是两者都选择。

关于压缩Peter已经提到7-zip和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-zipSharpZipLib的库来执行此操作。

您可以使用System.IO.Directory.GetFiles()遍历每个目录中的文件,按文件名解析并将它们添加到7-zip或SharpZipLib对象中。 如果有成千上万个文件,则最好将其放入服务或某种计划的任务中以使其在一夜之间运行,以免增加文件共享的负担。

祝你好运 !

编辑:作为附录,如果需要按创建日期或其他文件属性进行解析,则可以对每个文件使用System.IO.FileInfo对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM