【问题标题】:File.ReadAllLines prepends executable path to provided pathFile.ReadAllLines 将可执行路径添加到提供的路径
【发布时间】:2020-04-22 06:52:46
【问题描述】:

我遇到了一个非常奇怪的错误。如此奇怪,即使它对我来说似乎是一个错误,但我知道什么。

我在代码中使用 File.ReadAllLines(path) 方法,如下所示:

  string[] lines = File.ReadAllLines(path);

到目前为止很简单。我读取的路径在我的 C 盘上,所以它的格式如下:C:\Folder\Folder\File.txt

Putting a break-point at the above line and hovering over the path variable shows the correct path

这就是奇怪的地方。如果我真的运行这段代码,我会得到一个 IOException,它会通知我路径无效。它显示的路径似乎是我的应用程序可执行位置的路径 + 我传递给该方法的路径。

'C:\Users\kingv\Projects\C#\AUDS\Bsp2\bin\Debug\netcoreapp3.1\C:\Users\kingv\Projects\C#\AUDS\data\asc1k.txt

使用 File.ReadAllText 方法时也会出现此错误。

更奇怪的是,这似乎是一个项目特定的问题。我在这个解决方案中有两个项目。除了极少的区别外,它们的代码完全相同,与我的问题相关的代码完全相同(路径的声明和读取)

我以前从未遇到过 File.ReadAllLines 方法的问题。有人知道这里发生了什么吗?

【问题讨论】:

    标签: c# file io path file-read


    【解决方案1】:

    重现了您的问题,但只能通过复制您问题中错误消息所写的路径来实现。

    您的路径在开头有一个非法字符,因此它不被视为绝对的根路径,而是被视为相对路径。

    您需要修改路径的来源,或者如果它是文字,只需删除"C:\部分并重新编写。

    您可以通过以下方式查看:

    Encoding.UTF8.GetString(path)
    

    据我所知,它是 Unicode #8234,类似于:

    使用chrome的开发者工具查看元素内容时也可以看到:

    【讨论】:

    • 我从文件属性窗口获得了源字符串。显然我在那里复制了一些非法字符。仅替换开头没有帮助,但是重写整个路径确实解决了问题。非常感谢,非常有趣的问题。
    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 2011-07-15
    • 2021-02-25
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多