使用Ioniz.Zip DLL的具有相同名称但不同扩展名的zip文件

时间:2013-04-19 04:18:58

标签: c# zipfile dotnetzip compact-framework2.0

我需要帮助来编写一个函数,该函数会在文件夹中压缩所有具有相同名称但扩展名不同的文件。我正在使用 Ionic.Zip dll 来实现此目的。我正在使用 .Net紧凑框架2.0,VS2005 。我的代码如下所示:

   public void zipFiles()
   {
                string path = "somepath";
                string[] fileNames = Directory.GetFiles(path);
                Array.Sort(fileNames);//sort the filename in ascending order
                string lastFileName = string.Empty;
                string zipFileName = null;
                using (ZipFile zip = new ZipFile())
                    {
                        zip.AlternateEncodingUsage = ZipOption.AsNecessary;
                        zip.AddDirectoryByName("Files");

                        for (int i = 0; i < fileNames.Length; i++)
                        {
                            string baseFileName = fileNames[i];
                            if (baseFileName != lastFileName)
                            {
                                zipFileName=String.Format("Zip_{0}.zip",DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
                                zip.AddFile(baseFileName, "Files");
                                lastFileName = baseFileName;
                            }
                        }
                        zip.Save(zipFileName);
                    }
    }

问题:该文件夹将有3个同名文件但扩展名不同。现在,这些文件正在被设备FTP,因此文件名由它自动生成因此,例如,文件夹中有6个文件:“ABC123.DON”,“ABC123.TGZ”,“ABC123.TSY”,“XYZ456.DON”,“XYZ456.TGZ”,“ XYZ456.TSY”。我必须将名称为“ABC123”的3个文件和名称为“XYZ456”的其他3个文件压缩。正如我所说,我不知道文件的名称,我的功能必须在后台运行。我的当前代码拉链全部单个zip文件夹中的文件。 有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

试用以下代码

 string path = @"d:\test";

 //First find all the unique file name i.e. ABC123 & XYZ456 as per your example                
 List<string> uniqueFiles=new List<string>();
 foreach (string file in Directory.GetFiles(path))
 {
     if (!uniqueFiles.Contains(Path.GetFileNameWithoutExtension(file)))
         uniqueFiles.Add(Path.GetFileNameWithoutExtension(file));
 }

 foreach (string file in uniqueFiles)
 {
      string[] filesToBeZipped = Directory.GetFiles(@"d:\test",string.Format("{0}.*",file));

      //Zip all the files in filesToBeZipped 
 }