【问题标题】:Illegal Characters in Path when extracting zip file with C#使用 C# 提取 zip 文件时路径中的非法字符
【发布时间】:2016-02-11 19:55:02
【问题描述】:

我正在尝试编写一个将 zip 文件提取到目录中的方法,在提取的内容中找到一个文件,将该文件中的文本读取为一个字符串,然后返回该字符串。这是我的尝试

private string _getDataFile(string zipFile)
{

    string pathToFolder = @"C:\Path\To\The\File";

    foreach (char c in Path.GetInvalidPathChars())
    {
        pathToFolder = Regex.Replace(pathToFolder, c.ToString(), "");
    }
    string pathToFile = pathToFolder + @"\model.dat";
    ZipFile.ExtractToDirectory(zipFile, pathToFolder);
    string dataToReturn = File.ReadAllText(pathToFile);
    return dataToReturn;
}

但是,尽管我的 foreach 循环替换了非法路径字符,但无论我尝试使用哪个目录,程序仍然在 ZipFile.ExtractToDirectory 行的路径异常中抛出非法字符,我不知道为什么。任何帮助将不胜感激。

【问题讨论】:

  • ZipFile.ExtractToDirectory 发生异常,更新问题以指定
  • 你能发布异常消息吗?
  • 您检查过 pathToFolder 的值吗?如果是,ZipFile 是您创建的某个 dll 或类吗?您能否显示 ExtractToDirectory 源或错误消息?
  • 您的代码根本没有多大意义。 for 循环看起来不对。为什么你需要这样做?尝试诊断实际问题。做一些调试。不要猜测。

标签: c# file-io zip


【解决方案1】:

根据similar post 的说法,您的目标 zip 文件中的文件名似乎有问题;您指定的 zip 文件名或目录没有问题。尝试手动提取文件内容,看看是否有异常的文件名。

【讨论】:

  • 我会接受这个答案,因为你是对的。我正在使用 Encoding.UTF8.GetString(ComponentFiles.test) 传递 zip 文件。事实证明,它并没有像我想象的那样做。
【解决方案2】:

您可以遍历所有条目并在提取它们之前清理文件名,方法是使用我在这里写的这个 sn-p:ZipFile.ExtractToDirectory "Illegal characters in path"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2014-02-05
    • 2010-11-09
    相关资源
    最近更新 更多