我需要帮助编写一个函数,该函数将所有具有相同名称但不同扩展名的文件压缩在一个文件夹中。我使用Ionic.Zip dll来实现这一点。我正在使用。. Net compact framework 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文件夹中。有人能帮我一下吗?
试试下面的代码
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
}