【问题标题】:Filestream - The filename, directory name, or volume label syntax is incorrectFilestream - 文件名、目录名或卷标语法不正确
【发布时间】:2020-09-21 09:50:36
【问题描述】:

我有这个 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' 。为什么会进入项目路径?

【问题讨论】:

  • 你确定从路径C:\Data\123.jpg??
  • 是的。我确定文件在那里。
  • 小心复制/粘贴字符串,你可能会得到比你讨价还价的更多。该字符串的第一个字母不是“C”。通过将 filePath.ToCharArray() 放入调试表达式进行诊断,现在您可以看到不可见的 U+202A 代码点。只需重新输入即可修复。

标签: c# unicode


【解决方案1】:

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

上面的代码是正确的,和微软文档中的例子差不多。

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

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

就在字母“C”之前。

因此这不起作用:

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

但是这个可以:

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

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

22E280AA433A5C446174615C3132332E6A706722

第二个没有粗体序列。 您可以在调试器中或借助诸如 Notepad++ 可以使用 Extensions/Converter/ASCII->HEX 查看十六进制代码。

【讨论】:

  • 当我将路径复制并粘贴到 Visual Studio 的调试参数中时,我遇到了这个问题。听起来我有一个隐藏的字符
猜你喜欢
  • 2014-06-30
  • 2019-05-24
  • 2019-09-30
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多