ZipFile.ExtractToDirectory"路径中的非法字符"

时间:2014-05-01 12:31:05

标签: c# .net

我想用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文件中包含中文文件名的一些文件导致了问题。 当异常没有输出有问题的路径名时,这非常令人沮丧。

1 个答案:

答案 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?