压缩在C#中创建的文件夹
本文关键字:文件夹 创建 压缩 | 更新日期: 2023-09-27 18:30:11
我正在C#中创建一个文件夹,我希望在创建后立即将其压缩。我已经四处查看了(如何压缩文件夹)(http://dotnetzip.codeplex.com/)但到目前为止运气不佳。我有点担心使用dotnetzip,因为它的上一次发布是在5年前。
dotnetzip在VisualStudio2015中仍然有用吗?或者有没有一种更现代的方法可以在C#中压缩文件夹而不使用包?
这就是我复制文件夹的方式;
private static void CopyDirectory(string SourcePath, string DestinationPath, bool overwriteexisting)
{
SourcePath = SourcePath.EndsWith(@"'") ? SourcePath : SourcePath + @"'";
DestinationPath = DestinationPath.EndsWith(@"'") ? DestinationPath : DestinationPath + @"'";
if (Directory.Exists(SourcePath))
{
if (Directory.Exists(DestinationPath) == false)
Directory.CreateDirectory(DestinationPath);
foreach (string fls in Directory.GetFiles(SourcePath))
{
FileInfo flinfo = new FileInfo(fls);
flinfo.CopyTo(DestinationPath + flinfo.Name, overwriteexisting);
}
foreach (string drs in Directory.GetDirectories(SourcePath))
{
DirectoryInfo drinfo = new DirectoryInfo(drs);
CopyDirectory(drs, DestinationPath + drinfo.Name, overwriteexisting);
}
}
}
我希望在此之后压缩创建的文件夹。
要压缩文件夹,.Net 4.5框架包含ZipFile.CreateFromDirectory:
string startPath = @"c:'example'start";
string zipPath = @"c:'example'result.zip";
ZipFile.CreateFromDirectory(startPath, zipPath);
我只是想把我的两美分加到你已经接受的帖子上。假设你有一个文件夹结构:
C:'RootFolder
C:'RootFolder'Folder1
C:'RootFolder'Folder1'Folder1a
C:'RootFolder'Folder1'Folder1b
C:'RootFolder'file1.txt
C:'RootFolder'file2.txt
ZipFile.CreateFromDirectory
肯定是一条路。不需要第三方libs。您只需参考System.IO.Compression.FileSystem
我想指出的是:您可以将整个RootFolder压缩到存档
ZipFile.CreateFromDirectory(@"C:'RootFolder", @"C:'RootFolder.zip",
CompressionLevel.Optimal, true);
或者RootFolder的内容,而没有文件夹本身
ZipFile.CreateFromDirectory(@"C:'RootFolder", @"C:'RootFolder.zip",
CompressionLevel.Optimal, false);
第四个参数(bool-includeBaseDirectory)为我们提供了灵活性。希望它能帮助到别人。
如何在C#中压缩文件,不使用第三方API?涵盖了相同的领域,并为两者提供了解决方案。Net 3.5(https://stackoverflow.com/a/940621/2381157)和.Net 4.5(https://stackoverflow.com/a/20200025/2381157)所以我很惊讶@kap声明没有.NET类来做这件事。
您可以使用第三方dll ICSharpCode.SharpZipLib,在其中您可以使用下面的加载文件压缩目录以过滤流fs并继续字节=fs。读取(缓冲区,0,缓冲区长度)zipFile.Write(缓冲区0,字节)