ZipStorer как добавить каталог?

#c#

Вопрос:

 static string mydir = @"C:BobabinReleaseZipTest";
static string zipfile = string.Concat(mydir, ".zip");

using (ZipStorer zip = ZipStorer.Create(zipfile))
{
  zip.AddDirectory(ZipStorer.Compression.Deflate, mydir, zipfile);
}
 

Но после того, как я распакую архив, появятся папки

Реж.: Боба -> корзина >> Релиз >>> ZipTest >>>> Файлы…

Как добавить только ZipTest папку?


Я пытался сделать это вот так:

 DirectoryInfo d = new DirectoryInfo(mydir);
zip.AddDirectory(ZipStorer.Compression.Deflate, Path.GetFileName(d.FullName), Path.GetFileName(d.FullName), comment);
 

Создается Zip — архив, и внутри папки под названием ZipTestZipTest внутри находятся файлы и пустой архив под названием .zip.
Как сделать так, чтобы он просто сохранялся внутри архива?
И чтобы в папке ZipTest не было пустого архива?

Комментарии:

1. Таким образом, вы хотите, чтобы в папке выпуска отображались только файлы из zip-архива ZipTest?

2. @MaartenDev, Нужно добавить все файлы из ZipTest в ZipTest.zip . Так что внутри этого .zip есть ZipTest папка со всеми файлами

Ответ №1:

Попробуйте установить 3-й аргумент ( _pathnameInZip ) в .AddDirectory качестве пустой строки:

 string dir = @"C:BobabinReleaseZipTest";
string zipFile = string.Concat(dir, ".zip");
string comment = "My ZipTest";

using (ZipStorer zip = ZipStorer.Create(zipFile))
{
    zip.AddDirectory(ZipStorer.Compression.Deflate, dir, string.Empty, comment);
}
 

Комментарии:

1. Как я могу удалить внутреннюю папку ZipTest в архиве? Так что сам архив содержит только файлы

Ответ №2:

Если вам нужно без внутреннего каталога, то вы можете сделать это:

 public static void PackToZipWithoutInternalDir(string dir, string zipout, string comment = "") 
{
    if (Directory.Exists(dir) amp;amp; !string.IsNullOrWhiteSpace(dir) amp;amp; !string.IsNullOrWhiteSpace(zipout))
    {
        try
        {
           using var zip = ZipStorer.Create(zipout, comment); // true for stream
           zip.EncodeUTF8 = true; // Text encoding
           zip.ForceDeflating = true; // Force file compression
           
           foreach (string listDir in Directory.EnumerateDirectories(dir, "*", SearchOption.TopDirectoryOnly))
           {
              // Add folders with files to the archive
              zip.AddDirectory(ZipStorer.Compression.Deflate, listDir, string.Empty);
           }
          
           foreach (string listFiles in Directory.EnumerateFiles(dir, "*.*", SearchOption.TopDirectoryOnly))
           {
               // Add residual files in the current directory to the archive.
               zip.AddFile(ZipStorer.Compression.Deflate, listFiles, Path.GetFileName(listFiles));
           }
        }
        catch (Exception ex) { Console.WriteLine(ex); }
    }
}
 

Воспользуйся:

 namespace ZipStorerEx
{
    using System;
    using System.IO;

    public static class Program
    {
        private static readonly string CurrDir = Environment.CurrentDirectory;
        private static readonly string BeginDir = Path.Combine(CurrDir, "YouDir");
        private static readonly string ZipOut = $"{BeginDir}.zip";

        [STAThread]
        public static void Main()
        {
            Console.Title = "ZipStorerEx";

            PackToZipWithoutInternalDir(BeginDir, ZipOut, "It's Good");
            Console.ReadKey();
        }
    }
}