Filestream - 文件名、目录名或卷标语法不正确

7

我有这段 C# 代码,它应该可以打开一个文件。

string filePath = @"‪C:\Data\123.jpg";
FileStream fs = System.IO.File.OpenRead(filePath);

但是,它在第二行出错并显示错误信息The filename, directory name, or volume label syntax is incorrect

异常详细信息还显示了C:\\dotnet\\solution\\projectname\\‪C:\\Data\\123.jpg',为什么会进入项目路径呢?


1
你确定这个路径 C:\Data\123.jpg 是正确的吗? - Muaath
是的,我确定文件在那里。 - Steve
1
小心复制/粘贴字符串,你可能会得到更多的东西。那个字符串的第一个字母不是'C'。通过在调试表达式中放置filePath.ToCharArray()进行诊断,现在你可以看到看不见的U+202A代码点。只需重新输入即可修复。 - Hans Passant
1个回答

12

这可有点棘手,但又很简单。

上面的代码是正确的,它和 Microsoft 文档中的示例差不多。

但是在字母“C”之前有一个看不见的 Unicode 字符 E280AA

U+202A ‪ e2 80 aa 左到右嵌入

因此,这个不起作用:

string filePath = @"‪C:\Data\123.jpg";

但是这个可以:

string filePath = @"C:\Data\123.jpg";

第一个(只是实际字符串)的十六进制代码如下所示:

22E280AA433A5C446174615C3132332E6A706722

第二个没有粗体序列。您可以在调试器中或使用像Notepad++这样的工具中看到这一点,其中您可以使用扩展/转换器/ASCII->HEX来查看十六进制代码。


当我将路径复制并粘贴到Visual Studio的调试参数中时,我遇到了这个问题。听起来像是有一个隐藏字符。 - Chopchop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接