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後,我們看到以下內容:
並且其中標有綠色的名稱是正確的,並且標有紅色的名稱的名稱編碼已更改。
如果我們使用下面的代碼:
ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName);
我們有同樣的問題。如何解決這個問題?