C# - 基于Year-Month自动压缩文件夹中的文件

时间:2009-09-11 16:28:14

标签: c# zip

IT的任务是降低文件服务器的使用率,所以我想完成我的压缩旧文件(即Excel / Access / Txt)。

我们有一些包含数千个文件的文件夹,所以我不想将整个目录压缩成一个大文件 - 最好有一些较小的文件,以便用户更容易找到他们正在寻找的数据“桶”。

有没有办法使用C#来读取目录并将文件压缩为年月组(将所有文件从年份一起放在一个拉链中)?

或者使用像AutoIT这样的脚本会更好吗?

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

3 个答案:

答案 0 :(得分:4)

我不确定你的问题是关于压缩,选择特定年/月或两者的文件。

关于拉链彼得已经提到过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
   } 
}

答案 1 :(得分:2)

当然,您可以使用一些C#和7-zipSharpZipLib等库来执行此操作。

答案 2 :(得分:2)

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

祝你好运!

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