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

Ste*_*eve 4 c# unicode

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

string filePath = @"?C:\Data\123.jpg";
FileStream fs = System.IO.File.OpenRead(filePath);
Run Code Online (Sandbox Code Playgroud)

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

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

jps*_*jps 7

现在这是一个棘手的问题,但又如此简单。

上面的代码是正确的,它或多或少类似于 Microsoft 文档中的示例。

但是有一个看不见的Unicode字符E280AA

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

就在字母“C”之前。

因此这不起作用:

string filePath = @"?C:\Data\123.jpg";
Run Code Online (Sandbox Code Playgroud)

但这个确实:

string filePath = @"C:\Data\123.jpg";
Run Code Online (Sandbox Code Playgroud)

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

22 E280AA 433A5C446174615C3132332E6A706722

第二个没有粗体序列。您可以在调试器中或在 Notepad++ 等工具的帮助下看到这一点,您可以在其中使用 Extensions/Converter/ASCII->HEX 来查看十六进制代码。