Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Filestream-文件名、目录名或卷标语法不正确_C#_Unicode - Fatal编程技术网

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

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'。为什么会进入项目路径?这是一个棘手的问题,但很简单 上面的代码是

我有一个C代码,应该用来打开一个文件

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中将路径复制并粘贴到调试参数时遇到了这个问题。听起来我有一个隐藏的字符