ZipFile.ExtractToDirectory "路径中的非法字符"
Posted
技术标签:
【中文标题】ZipFile.ExtractToDirectory "路径中的非法字符"【英文标题】:ZipFile.ExtractToDirectory "Illegal characters in path" 【发布时间】:2014-05-01 12:31:04 【问题描述】:我想用 c# (VS2012) 中的 ZipFile 类解压缩一个文件。 即使我直接从 win explorer 复制路径,我也会收到此错误:
System.ArgumentException: Illegales Zeichen im Pfad。北 System.IO.Path.CheckInvalidPathChars(字符串路径,布尔值 checkAdditional) bei System.IO.Path.GetFileName(String path) bei System.IO.Compression.ZipHelper.EndsWithDirChar(String test) bei System.IO.Compression.ZipArchiveEntry.set_FullName(字符串值) 北 System.IO.Compression.ZipArchiveEntry..ctor(ZipArchive 存档, ZipCentralDirectoryFileHeader cd) bei System.IO.Compression.ZipArchive.ReadCentralDirectory() 贝 System.IO.Compression.ZipArchive.get_Entries() 贝 System.IO.Compression.ZipFileExtensions.ExtractToDirectory(ZipArchive source, String destinationDirectoryName) bei System.IO.Compression.ZipFile.ExtractToDirectory(字符串 sourceArchiveFileName,字符串destinationDirectoryName,编码 entryNameEncoding) bei System.IO.Compression.ZipFile.ExtractToDirectory(字符串 sourceArchiveFileName, String destinationDirectoryName) bei WindowsFormsApplication1.MainForm.buttonStartNxtOSEK_Click(对象 发件人,EventArgs e) 在 d:\C#\nxtOSEKInstaller\nxtOSEKSetup\WindowsFormsApplication1\Form1.cs:Zeile 192.
代码:
string zipPath = @"D:\C#\nxtOSEKInstaller\nxtOSEKSetup\WindowsFormsApplication1\bin\Debug\res\package.zip";
string extractPath = @"D:\testcyginstall\cygwin";
textBoxProgress.AppendText("Entpacke .... ");
try
ZipFile.ExtractToDirectory(zipPath, extractPath);
catch (System.ArgumentException ex)
textBoxProgress.AppendText("\n" + "Error\n" + ex.ToString());
return;
编辑 问题解决: zip 文件中的一些文件名是中文的文件导致了这个问题。 当异常没有输出有问题的路径名时,非常令人沮丧。
【问题讨论】:
我认为 '#' 会出错。尝试更改您的文件夹名称。如果仍然有错误,我们将尝试配置它:) 没有它仍然值得测试,只是为了确保这不是问题。 如果手动解压,文件名是什么? @user2971596 有什么可疑的名字吗? .zip 存档本身包含一个使用保留字符的文件。当问题中出现“cygwin”这个词时,这并不完全是一个谜,Unix 名称规则与 Windows 不同。当然,我们无法帮助您找到文件,祝您好运,挖掘其中的 1000 个文件。获取参考源并使用调试器是取得成功的明显方法。 【参考方案1】:您已经知道某些字符在 Windows 上无效:
\ / : * ? " |
当您的应用程序从不同的操作系统接收 zip 时,这会带来很多情况,因为其中一些无效字符在其他操作系统中有效。
为了解决这个问题,您可以在提取文件名之前对其进行清理:
public void ExtractZipFileToPath(
string zipFilePath,
string ouputPath
)
using (var zip = ZipFile.Read(zipFilePath))
foreach (var entry in zip.Entries.ToList())
entry.FileName = SanitizeFileName(entry.FileName);
entry.Extract(ouputPath);
在此处清理示例How to remove illegal characters from path and filenames?
【讨论】:
以上是关于ZipFile.ExtractToDirectory "路径中的非法字符"的主要内容,如果未能解决你的问题,请参考以下文章