C# Filestream-文件名、目录名或卷标语法不正确
我有一个C代码,应该用来打开一个文件C# Filestream-文件名、目录名或卷标语法不正确,c#,unicode,C#,Unicode,我有一个C代码,应该用来打开一个文件 string filePath = @"C:\Data\123.jpg"; FileStream fs = System.IO.File.OpenRead(filePath); 但是,它在第二行中断,并显示错误消息文件名、目录名或卷标语法不正确 异常详细信息还显示C:\\dotnet\\solution\\projectname\\C:\\Data\\123.jpg'。为什么会进入项目路径?这是一个棘手的问题,但很简单 上面的代码是
string filePath = @"C:\Data\123.jpg";
FileStream fs = System.IO.File.OpenRead(filePath);
但是,它在第二行中断,并显示错误消息文件名、目录名或卷标语法不正确
异常详细信息还显示
C:\\dotnet\\solution\\projectname\\C:\\Data\\123.jpg'
。为什么会进入项目路径?这是一个棘手的问题,但很简单
上面的代码是正确的,或多或少类似于Microsoft文档中的示例
但是有一个不可见的Unicode字符
U+202A e2 80 aa左右嵌入
就在字母“C”之前
因此,这不起作用:
string filePath = @"C:\Data\123.jpg";
但这一个是:
string filePath = @"C:\Data\123.jpg";
第一个十六进制代码(仅为实际字符串)如下所示:
22E280AA433A5C446174615C3132332E6A706722
第二个没有粗体顺序。
您可以在调试器中或在以下工具的帮助下看到这一点:
记事本+,您可以使用扩展名/Converter/ASCII->HEX查看十六进制代码。从路径
C:\Data\123.jpg
确定吗?是。我确信文件在那里。仔细复制/粘贴字符串,你可能会得到比你预想的更多的东西。该字符串的第一个字母不是“C”。通过将filePath.ToCharArray()放入调试表达式进行诊断,现在可以看到不可见的U+202A代码点。只需重新键入即可修复。我在visual studio中将路径复制并粘贴到调试参数时遇到了这个问题。听起来我有一个隐藏的字符