Структура zip-файла должна выглядеть следующим образом:
Код: Выделить всё
XYZLogs_2024.zip
|
|- 03/
| - Log_2024-03-01.log
| - Log_2024-03-02.log
| - Log_2024-03-03.log
| - ...
|- 04/
| - Log_2024-04-01.log
| - ...
|- 05/
| - Log_2024-05-01.log
| - ...
Вот часть метода, которая обрабатывает добавление файлов в существующий zip-файл:
Код: Выделить всё
using (var zip = ZipFile.Open(destinationZipFilePath, ZipArchiveMode.Update))
{
var sourceDirInfo = new DirectoryInfo(sourceDirectoryPath);
foreach (var file in sourceDirInfo.EnumerateFiles("*", SearchOption.AllDirectories))
{
var pathInZip = file.FullName
.Replace(sourceDirInfo.FullName, "") // strip off the folder it's contained in
.Replace("\\", "/"); // replace backslashes with forward slashes
// THIS didn't fix it ...
/*
var inFolder = (pathInZip.Contains("/"))
? pathInZip.Substring(0, pathInZip.IndexOf("/"))
: null;
if (inFolder != null)
{
var folderExisting = zip.GetEntry(inFolder);
if (folderExisting != null)
{
zip.CreateEntry(inFolder);
}
}
*/
// what if file already exists in zip?
var existingEntry = zip.GetEntry(pathInZip);
if (existingEntry != null)
{
existingEntry.Delete();
}
// add to zip
zip.CreateEntryFromFile(
file.FullName,
pathInZip,
compressionLevel);
}
}
- Как видно из приведенного выше кода, я попытался создать запись для папок месяца, что не сработало.
- Я также попробовал закомментировать строку, в которой обратная косая черта заменяется прямой, на случай, если это была проблема, но это тоже не дало результата.
- Я предпочитаю сохранить все свойства файла, особенно дату создания/дату изменения , поэтому я использую метод CreateEntryFromFile.
- Я бы предпочел решение, которое не требует извлечения всего из zip-файла и воссоздания всего zip-файла, если возможно.
Подробнее здесь: https://stackoverflow.com/questions/791 ... les-dont-s