Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 压缩在C中创建的文件夹#_C#_Zip_Dotnetzip - Fatal编程技术网

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

C# 压缩在C中创建的文件夹#,c#,zip,dotnetzip,C#,Zip,Dotnetzip,我正在用C#创建一个文件夹,我希望在创建后尽快将其压缩。我四处看了看,但到目前为止运气不好。我有点担心使用dotnetzip,因为它的上一个版本是5年前发布的 dotnetzip在Visual Studio 2015中是否仍然适用,或者是否有一种更现代的方法可以在不使用包的情况下压缩C#中的文件夹 这就是我复制文件夹的方式 private static void CopyDirectory(string SourcePath, string DestinationPath, bool o

我正在用C#创建一个文件夹,我希望在创建后尽快将其压缩。我四处看了看,但到目前为止运气不好。我有点担心使用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);
            }
        }
    }

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

涵盖了相同的领域,并且有针对.Net 3.5()和.Net 4.5()的解决方案所以我很惊讶@kap声明没有.NET类可以这样做。

您可以使用第三方dll ICSharpCode.SharpZipLib,在其中您可以使用下面的加载文件将目录压缩到filsstream fs并继续
bytes=fs.Read(buffer,0,buffer.Length)zipFile.Write(buffer,0,bytes)

要压缩文件夹,.Net 4.5 framework包含:


我只是想把我的两分钱加到你已经接受的帖子上。 假设您有一个文件夹结构:

C:\RootFolder
C:\RootFolder\Folder1
C:\RootFolder\Folder1\Folder1a
C:\RootFolder\Folder1\Folder1b
C:\RootFolder\file1.txt
C:\RootFolder\file2.txt
ZipFile.CreateFromDirectory
绝对是一个不错的选择。不需要第三方LIB。您只需引用
System.IO.Compression.FileSystem

我想指出的是: 您可以将整个根文件夹(包括它)压缩到存档中

ZipFile.CreateFromDirectory(@"C:\RootFolder", @"C:\RootFolder.zip", 
                            CompressionLevel.Optimal, true);
或者根文件夹的内容,而不包含文件夹本身

ZipFile.CreateFromDirectory(@"C:\RootFolder", @"C:\RootFolder.zip", 
                            CompressionLevel.Optimal, false);
第四个参数(bool includeBaseDirectory)为我们提供了这种灵活性。
希望它能帮助别人。

“目前为止运气不好”并不是真正的描述。显示您的尝试及其结果。在.Net 4.5中有一个关于课堂特定主题的详细介绍。@stuartd感谢您的回答。我刚刚尝试使用此选项,但出现了一个错误:
文件已经存在
。据我所知,它需要一个文件才能存在,这样它才能压缩它?我相信从文档中可以看出,该错误表明压缩文件已经存在“如果存档已存在,则会引发IOException异常…”
destinationArchiveFileName
已存在”“为什么投票否决?指向重复问题的链接包含与@stuartd提供的信息相同的信息,这是可接受的答案。但是OutputStream.Write(缓冲区,0,sourceBytes);将所有这些文件放在一个文件夹中…如何保存?但OutputStream.Write(缓冲区,0,sourceBytes);将所有这些文件放在一个文件夹中…如何保存?
ZipFile.CreateFromDirectory(@"C:\RootFolder", @"C:\RootFolder.zip", 
                            CompressionLevel.Optimal, false);