2016-03-02 127 views
5

我們使用ASP.NET核心,有這樣的代碼:荏苒文件夾畢竟拉鍊項更改編碼

public static void Compress(string sourceDirectoryName, string destinationArchiveFileName) 
{ 
    var directoryName = Path.GetFileName(sourceDirectoryName); 
    var remotePath = sourceDirectoryName.Split(new[] { directoryName }, StringSplitOptions.RemoveEmptyEntries).First(); 

    using (var zipStream = new MemoryStream()) 
    { 
     using (var zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true, Encoding.UTF8)) 
     { 
      zip.CreateEntry(string.Concat(directoryName, directorySlash)); 

      foreach (var path in Directory.EnumerateFileSystemEntries(sourceDirectoryName, "*", SearchOption.AllDirectories)) 
      { 
       if (!Directory.Exists(path)) 
        zip.CreateEntryFromFile(path, path.RemoveSubString(remotePath).ReplacePathSeparatorOnSlash()); 
       else 
        zip.CreateEntry(string.Concat(path.RemoveSubString(remotePath).ReplacePathSeparatorOnSlash(), directorySlash)); 
      } 
     } 

     using (var outputZip = new FileStream(destinationArchiveFileName, FileMode.Create)) 
     { 
      zipStream.Seek(0, SeekOrigin.Begin); 
      zipStream.CopyTo(outputZip); 
     } 
    } 
} 

荏苒,包含俄羅斯的符號,如果我們打開這個壓縮文件與Windows資源管理器sourceDirectoryName後,我們看到以下內容:

enter image description here 並且其中標有綠色的名稱是正確的,並且標有紅色的名稱的名稱編碼已更改。

如果我們使用下面的代碼:

ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName); 

我們有同樣的問題。如何解決這個問題?

回答

2

我找到答案。我必須使用編碼866:

using (var zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true, Encoding.GetEncoding(866))) 
{ 
    ... 
}