2016-01-13 193 views
2

我在C#中创建一个文件夹,我希望一旦创建它就可以将其压缩。我已经看过(How to zip a folder),(http://dotnetzip.codeplex.com/),但目前还没有运气。我对使用dotnetzip有点担心,因为它的最新版本是5年前。在C中创建一个文件夹的Zip文件夹#

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); 
      } 
     } 
    } 

我期待在此之后压缩创建的文件夹。

+0

_“目前还没有运气”_并不真正具有描述性。显示您的尝试和结果。 – CodeCaster

+1

.Net 4.5中有[ZipFile.CreateFromDirectory](https://msdn.microsoft.com/en-us/library/hh485707%28v=vs.110%29.aspx) – stuartd

+0

调查[压缩](https:/ /msdn.microsoft.com/en-us/library/system.io.compression(v=vs.110).aspx)与[ZipArchive]的具体主题(https://msdn.microsoft.com/en-us /library/system.io.compression.ziparchive(v=vs.110).aspx)类。 –

回答

4

要压缩的文件夹,在.NET 4.5框架包含ZipFile.CreateFromDirectory

string startPath = @"c:\example\start"; 
string zipPath = @"c:\example\result.zip"; 

ZipFile.CreateFromDirectory(startPath, zipPath); 
-1

您可以使用第三方的dll ICSharpCode.SharpZipLib里面,你可以用下面的负载文件filsstream FS和进行 字节= fs.Read(缓冲,0,buffer.Length)zipFile.Write(缓冲压缩目录,0 ,字节)

0

只是想我的两分钱添加到您已接受作为答案的帖子。 比方说,你有一个文件夹结构:

C:\RootFolder 
C:\RootFolder\Folder1 
C:\RootFolder\Folder1\Folder1a 
C:\RootFolder\Folder1\Folder1b 
C:\RootFolder\file1.txt 
C:\RootFolder\file2.txt 

ZipFile.CreateFromDirectory肯定是要走的路。不需要第三方库。你只需要引用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)给了我们这个灵活性。 希望它可以帮助别人。

相关问题