Например, если у меня есть папка с именем 2016, а внутри этой папки есть папки Jan-Dec и другие файлы, есть ли способ заархивировать эти папки вместе в 2016.zip? Все, что я пробовал, объединяет ВСЕ файлы в папке, но я хочу сжать вместе ТОЛЬКО папки и никакие другие файлы в папке.
По сути, это будет 2016.zip с папками января-декабря в 2016.zip, причем в каждой из папок будут соответствующие файлы, а не пустые папки в zip.
Следующий код захватывает ФАЙЛЫ, начинающиеся с 00, но не папки.
// Where the files are located
string strStartPath = txtTargetFolder.Text;
// Where the zip file will be placed
string strZipPath = @"C:\Users\smelmo\Desktop\testFinish\" + strFileNameRoot + "_" + txtDateRange1.Text.Replace(@"/", "_") + "_" + txtDateRange2.Text.Replace(@"/", "_") + ".zip";
if(File.Exists(strZipPath))
{
File.Delete(strZipPath);
}
using (ZipArchive archive = ZipFile.Open(strZipPath, ZipArchiveMode.Create))
{
foreach (FileInfo file in new DirectoryInfo(strStartPath).GetFiles())
{
if (file.Name.StartsWith("00"))
{
var entry = archive.CreateEntryFromFile(Path.Combine(file.Directory.ToString(), file.Name), file.Name);
}
}
}
Я также пытался использовать typeof()
, но он не захватывает папки или что-то еще.
using (ZipArchive archive = ZipFile.Open(strZipPath, ZipArchiveMode.Create))
{
foreach (FileInfo file in new DirectoryInfo(strStartPath).GetFiles())
{
Type t = file.GetType();
if (t.Equals(typeof(Directory)))
{
var entry = archive.CreateEntryFromFile(Path.Combine(file.Directory.ToString(), file.Name), file.Name);
}
}
EDIT: добавлены подробности для ясности
foreach
и создал запись для каждого имени каталога? 13.06.2017