2016-01-13 194 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)給了我們這個靈活性。 希望它可以幫助別人。

相關問題