zip-файлы с одинаковыми именами, но разными расширениями, с помощью Ioniz.Zip DLL
Мне нужна помощь в написании функции, которая архивирует все файлы с одинаковыми именами, но с разными расширениями в папке. Я использую 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". Я должен сжать 3 файла с именами "ABC123" и 3 других файла с именами "XYZ456". Как я уже сказал, я не буду знать имена файлов, и моя функция должна работать в фоновом режиме. Мой текущий код застегивает все файлы в одной папке zip. Может кто-нибудь, пожалуйста, помогите мне с этим?
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
}