#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();
}
}
}