我想用c#(VS2012)中的ZipFile类解压缩文件。 即使我直接从win explorer复制路径,我也会收到此错误:
System.ArgumentException:Illegales Zeichen im Pfad。北 System.IO.Path.CheckInvalidPathChars(String path,Boolean checkAdditional)bei System.IO.Path.GetFileName(String path)bei System.IO.Compression.ZipHelper.EndsWithDirChar(String test)bei System.IO.Compression.ZipArchiveEntry.set_FullName(String value)
bei System.IO.Compression.ZipArchiveEntry..ctor(ZipArchive archive, ZipCentralDirectoryFileHeader cd)bei System.IO.Compression.ZipArchive.ReadCentralDirectory()bei System.IO.Compression.ZipArchive.get_Entries()bei System.IO.Compression.ZipFileExtensions.ExtractToDirectory(ZipArchive source,String destinationDirectoryName)bei System.IO.Compression.ZipFile.ExtractToDirectory(字符串 sourceArchiveFileName,String destinationDirectoryName,Encoding entryNameEncoding)bei System.IO.Compression.ZipFile.ExtractToDirectory(字符串 sourceArchiveFileName,String destinationDirectoryName)bei WindowsFormsApplication1.MainForm.buttonStartNxtOSEK_Click(对象 发件人,EventArgs e)in 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文件中包含中文文件名的一些文件导致了问题。 当异常没有输出有问题的路径名时,这非常令人沮丧。
答案 0 :(得分:2)
如您所知,某些字符在Windows上无效:
\ /:*? " < > |
当您的应用程序从不同的操作系统接收压缩时,这会带来很多情况,因为其中一些无效字符在其他操作系统中有效。
为了解决这个问题,您可以在提取之前清理文件名:
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?