我使用此代码来压缩路径中的所有文件和文件夹。
using (ZipFile zip = new ZipFile())
{
zip.AddDirectory(@"MyDocuments\ProjectX", "ProjectX");
zip.Save(zipFileToCreate);
}
例如:
我压缩了Folder1,并且此代码有效。但这会使用Folder1压缩所有文件和文件夹。但是我在Folder1中只有zip文件和文件夹。
生成我的代码:
MyFileZip
文件夹1
文件夹2
file4
但是我想要这个结果:
MyFileZip
文件夹2
- file1
- file2
- file3
file4
答案 0 :(得分:1)
我想知道如何将ZipFile
类实例化为静态类,
任何方式使用此代码
string startPath = @"<path-to-folder1>";
string zipPath = @"<path-to-output>\MyFileZip.zip";
ZipFile.CreateFromDirectory(startPath, zipPath);
请记住,目标文件夹不能与folder1
相同,否则您将获得声明正在使用异常的进程
答案 1 :(得分:0)
您可以使用以下静态方法覆盖并将includeBaseDirectory
指定为false
public static void CreateFromDirectory (string sourceDirectoryName,
string destinationArchiveFileName,
System.IO.Compression.CompressionLevel compressionLevel, bool
includeBaseDirectory, System.Text.Encoding entryNameEncoding);
答案 2 :(得分:0)
如果压缩文件的目标文件夹应该与源文件夹相同,则可以使用用户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));