压缩在 C# 中创建的文件夹
Zip a Folder Created in C#
我正在用 C# 创建一个文件夹,我希望在创建后立即将其压缩。我环顾四周 (How to zip a folder), (http://dotnetzip.codeplex.com/),但到目前为止运气不好。我有点担心使用 dotnetzip,因为它的最后一个版本是 5 年前的。
dotnetzip 在 Visual Studio 2015 年是否仍然相关,或者是否有更现代的方式在 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);
}
}
}
我想在这之后压缩创建的文件夹。
How do I ZIP a file in C#, using no 3rd-party APIs? covers the same ground and has solutions for both .Net 3.5 () and .Net 4.5 () 所以我很惊讶@kap 说没有 .NET class 可以做到这一点。
您可以使用第三方 dll ICSharpCode.SharpZipLib 在其中您可以使用下面的加载文件压缩目录到 filsstream fs 并继续
bytes = fs.Read(buffer, 0, buffer.Length)zipFile.Write(buffer, 0, bytes)
要压缩文件夹,.Net 4.5 框架包含 ZipFile.CreateFromDirectory:
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
ZipFile.CreateFromDirectory(startPath, zipPath);
只是想将我的两分钱加到您已经接受的 post 作为答案。
假设您有一个文件夹结构:
C:\RootFolder
C:\RootFolder\Folder1
C:\RootFolder\Folder1\Folder1a
C:\RootFolder\Folder1\Folder1b
C:\RootFolder\file1.txt
C:\RootFolder\file2.txt
ZipFile.CreateFromDirectory
绝对是正确的选择。不需要第 3 方库。您只需要参考 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# 创建一个文件夹,我希望在创建后立即将其压缩。我环顾四周 (How to zip a folder), (http://dotnetzip.codeplex.com/),但到目前为止运气不好。我有点担心使用 dotnetzip,因为它的最后一个版本是 5 年前的。
dotnetzip 在 Visual Studio 2015 年是否仍然相关,或者是否有更现代的方式在 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);
}
}
}
我想在这之后压缩创建的文件夹。
How do I ZIP a file in C#, using no 3rd-party APIs? covers the same ground and has solutions for both .Net 3.5 () and .Net 4.5 () 所以我很惊讶@kap 说没有 .NET class 可以做到这一点。
您可以使用第三方 dll ICSharpCode.SharpZipLib 在其中您可以使用下面的加载文件压缩目录到 filsstream fs 并继续 bytes = fs.Read(buffer, 0, buffer.Length)zipFile.Write(buffer, 0, bytes)
要压缩文件夹,.Net 4.5 框架包含 ZipFile.CreateFromDirectory:
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
ZipFile.CreateFromDirectory(startPath, zipPath);
只是想将我的两分钱加到您已经接受的 post 作为答案。 假设您有一个文件夹结构:
C:\RootFolder
C:\RootFolder\Folder1
C:\RootFolder\Folder1\Folder1a
C:\RootFolder\Folder1\Folder1b
C:\RootFolder\file1.txt
C:\RootFolder\file2.txt
ZipFile.CreateFromDirectory
绝对是正确的选择。不需要第 3 方库。您只需要参考 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) 为我们提供了这种灵活性。 希望对大家有帮助。