Добавление файлов в существующий zip-файл — размер zip-файла увеличивается, но файлы не отображаются.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Добавление файлов в существующий zip-файл — размер zip-файла увеличивается, но файлы не отображаются.

Сообщение Anonymous »

У меня есть метод для создания или добавления к существующему zip-файлу, который либо вызывает ZipFile.CreateFromDirectory(), когда zip-архив еще не существует, либо открывает zip-архив с помощью класса ZipFile, и добавляет в него файлы. (Примечание: при использовании .NET Framework, 4.7.2).
Структура 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
| - ...
Это прекрасно работает, как и ожидалось, при вызове ZipFile.CreateFromDirectory(). Однако проблема возникает, когда я пытаюсь добавить файлы в существующий zip-файл. Размер zip-файла увеличивается, но новые файлы/папки никогда не появляются в zip-файле, даже если я пытаюсь извлечь все. Никаких исключений не создается.
Вот часть метода, которая обрабатывает добавление файлов в существующий 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Добавление файлов в существующий zip-файл — размер zip-файла увеличивается, но файлы не отображаются.
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Добавление файлов в существующий zip-файл — размер zip-файла увеличивается, но файлы не отображаются.
    Anonymous » » в форуме C#
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Добавление файла в существующий в файле Zip памяти с Zip4j
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Добавление файла в существующий в файле Zip памяти с Zip4j
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Добавление каталога в существующий файл .zip
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»