为什么同时使用以下代码
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和存在的filePath
(C:\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] 删除。
我来说两句