压缩在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);
            }
        }
    }

我希望在此之后压缩创建的文件夹。

压缩在C#中创建的文件夹

要压缩文件夹,.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,字节)