Как заархивировать только файл и папку в пути в C # - PullRequest
0 голосов
/ 28 января 2019

Я использую этот код для архивирования всех файлов и папок в моем пути.

using (ZipFile zip = new ZipFile())
{
zip.AddDirectory(@"MyDocuments\ProjectX", "ProjectX");
zip.Save(zipFileToCreate);
}

Например:

  • Папка1
    • Папка2
      • файл1
      • файл2
      • файл3
    • файл4
    • файл5
    • файл6

Я заархивировал папку 1, и этот код работает.но это zip все файлы и папки с Folder1.но у меня есть только zip-файл и папка в Folder1.

Приведите мой код:

  • MyFileZip

    • Folder1

      • Папка2

        • файл1
        • файл2
        • файл3
      • файл4

      • file5
      • file6

Но я хочу этот результат:

  • MyFileZip

    • Папка2

          - file1
          - file2
          - file3
      
    • file4

    • file5
    • file6

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Вы можете использовать следующий статический метод переопределения и указать includeBaseDirectory как false

   public static void CreateFromDirectory (string sourceDirectoryName,
    string destinationArchiveFileName,
    System.IO.Compression.CompressionLevel compressionLevel, bool
    includeBaseDirectory, System.Text.Encoding entryNameEncoding);

Документация

0 голосов
/ 28 января 2019

Если целевая папка заархивированных файлов должна совпадать с исходной папкой, вы можете использовать каталог User Temp в качестве временного хранилища.
Это потому, что вы не можете создать Zip-файл в той же директориион содержит файлы / папки для сжатия: он попытается сжать себя, вызывая исключение.

string sourceFolder = 
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "ProjectX");
string destinationFolder = sourceFolder;
string ZippedFileName = "ZippedFile.zip";

string userTempFolder = Environment.GetEnvironmentVariable("Temp", EnvironmentVariableTarget.User);
string zippedTempFile = Path.Combine(userTempFolder, ZippedFileName);
if (File.Exists(zippedTempFile)) { File.Delete(zippedTempFile); }

ZipFile.CreateFromDirectory(sourceFolder, ZippedFileName);
File.Move(zippedTempFile, Path.Combine(destinationFolder, ZippedFileName));
0 голосов
/ 28 января 2019

Интересно, как вам удалось создать экземпляр класса ZipFile как его статический, в любом случае используйте этот код

    string startPath = @"<path-to-folder1>";
    string zipPath = @"<path-to-output>\MyFileZip.zip";

    ZipFile.CreateFromDirectory(startPath, zipPath);

Просто помните, что папка назначения не может совпадать с folder1, или вы получаетеиспользуется процесс подачи заявки на исключение

...