为什么File.OpenRead()将相对路径附加到可执行文件?

要不然

为什么同时使用以下代码

string filePath = @"‪C:\test\upload.pdf"
FileStream fs = File.OpenRead(filePath);

引发以下异常?

The filename, directory name, or volume label syntax is incorrect : 
'C:\ConsoleApp\bin\Debug\netcoreapp2.1\‪‪C:\test\upload.pdf'

C:\ConsoleApp\bin\Debug\netcoreapp2.1\‪‪目录来自哪里

更新:File.OpenRead()我的情况下,内中的DLL和存在的filePathC:\test\upload.pdf)通过正在使用该DLL的应用程序发送的。

帕纳焦蒂斯·卡纳沃斯

该字符串以不可见的字符开头,因此不是有效路径。这个

(int)@"‪C:\test\upload.pdf"[0]

退货

8234

或十六进制202A这就是从左向右嵌入的标点符号

更新

Raymond Chen发表了一篇文章,为什么我的文件名开头没有一个看不见的U + 202A?

我们前段时间看到,作为最后的选择,您可以插入字符U + 202B(从右向左嵌入)以强制将文本解释为从右至左。相反的字符是U + 202A(从左到右嵌入),它强制将文本解释为从左到右。

“安全性”对话框在文件名字段中插入该控制字符,以确保按预期方式解释路径组件不幸的是,这还意味着,如果您尝试将文本从对话框中复制出来,则Unicode格式控制字符会伴随您的一程。由于角色通常是不可见的,因此可以造成各种无声的混乱。

(我们很幸运,记事本和命令提示符很快就检测到了混乱。但是,请想象一下,如果您已经将该路径粘贴到了源代码中的C程序中!)

自该文章发表以来的4年中,记事本获得了UTF8支持,因此该字符不会被问号代替。粘贴到具有不完整的UTF8支持的当前Windows控制台中仍会替换该字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在bash REPL中运行`echo $ 0`仅返回bash可执行文件的名称,而在zsh中返回zsh可执行文件的绝对路径?

`file`,为什么可执行文件没有报告为可执行文件?

在带有符号链接的可执行文件中使用相对路径

为什么汇编的可执行文件大小相同

为什么Rust可执行文件如此庞大?

为什么运行“错误”的可执行文件?

为什么本地文件中的相对路径被转换为绝对路径?

不管可执行文件的位置如何,如何使用相对路径访问项目目录中的文件?

Xcode:如何将当前工作目录设置为可执行文件的相对路径?

/ vs. \到CMD和C系统功能中可执行文件的相对路径

通过相对路径中的守护程序systemd启动一个dotnet核心可执行文件

为什么我的64位可执行文件比32位可执行文件大3倍?

为什么emacs-lsp go-mode在路径中找不到go可执行文件?

为什么我不能指定可执行文件的完整路径以在cmd中启动命令?

为什么 C# Process.Start 在我的路径上找不到可执行文件?

为什么某些共享库是可执行文件,为什么以及如何运行?

在运行时获取可执行文件路径的最佳方法是什么?

<com:ExeServer /> 所需的可执行文件的路径是什么

为什么ghci不使用相对路径?

为什么我不能使用相对路径在CLion中打开文件?

与共享库链接时,添加到可执行文件的内容是什么?

当file_path是相对路径时,os.path.isfile(file_path)返回false,为什么?

为什么每个sudo执行的可执行文件都需要sudo?

为什么删除后该可执行文件仍然执行?

为什么需要将某些文件设置为可执行文件?

为什么在Linux中有多个可执行文件文件夹?

为什么source(或dot命令)不需要文件可执行文件

cmake-是否可以在运行时将可执行文件链接到具有相对路径的共享库?

为什么不使.txt文件可执行文件而不是.sh文件可执行文件来运行脚本?