Если вы можете использовать Linq (т.е. Framework 3.5 или более позднюю версию), вы можете сделать что-то вроде следующего
Это использует Linq для группировки файлов по fileName (без расширения). Оказавшись в этом формате, вам будет проще их перебирать.
string InputDir="C:\\Temp\\";
string OutputDir="C:\\Temp\\zipped\\";
Directory.SetCurrentDirectory(InputDir);//Will change this later
DirectoryInfo di = new DirectoryInfo(InputDir);
var filenames = di.GetFiles().ToList();
var zipFiles =
(
from r in filenames
group r by System.IO.Path.GetFileNameWithoutExtension(r.Name) into results
select new { results.Key , Filenames = (from r in results select r.FullName) }
);
foreach(var r in zipFiles)
{
string zipFileName = System.IO.Path.Combine(OutputDir , r.Key + ".zip");
Console.WriteLine("Creating Zip file " + zipFileName);
ZipFile zip = new ZipFile();
foreach(var filename in r.Filenames)
{
Console.WriteLine(" Adding File " + filename);
zip.AddFile(filename);
}
zip.Save(zipFileName);
}
Не проверял это, а также я не знаю, как Ionic справляется со случаем, когда zip-файл уже существует.