我得到一个或多或少看起来像这样的字符串:
"C:\\bláh\\bleh"
我用它制作一个FileInfo,但是当我检查它的存在时它返回false:
var file = new FileInfo(path);
file.Exists;
如果我手动将路径重命名为
"C:\\blah\\bleh"
在调试时并确保blah存在于其中的bleh,然后file.Exists开始返回true . 所以我认为问题是非ascii角色 .
实际的字符串是由我的程序构建的 . 一部分来自应用程序的AppDomain,它是包含“á”的部分,另一部分来自用户 . 这两个部分由Path.Combine组合在一起 . 我以两种方式确认了结果字符串的有效性:将其从我的程序生成的错误(包括路径)中复制到资源管理器中打开文件就好了 . 在调试器中查看该字符串,它看起来正确转义,其中\被写为\ . “á”由调试器文字打印 .
我应该如何处理一个字符串,即使它有非ascii字符,它结果是一个有效的路径?
6 回答
这是一种处理文件名中的变音符号的方法 . File.Exists方法的成功取决于系统如何存储文件名 .
试试这个
注意:Exists方法不应用于路径验证,此方法仅检查路径中指定的文件是否存在 . 将无效路径传递给Exists将返回false .
对于路径验证,您可以使用Directory.Exists .
我刚刚manuall创建了一个包含bleh文件的bláh文件夹,并且在此处,此代码按预期打印
True
:我建议检查你的字符串的来源 - 特别是,虽然你的3k代表反对这是问题,但请记住,表示反斜杠为
\\
是C#语法的工件,并且你想确保你的字符串实际上只包含单个\
s .参考@adatapost的回复,无效文件名字符列表(从
System.IO.Path.GetInvalidFileNameChars()
收集到的字母实际上不包含带有变音符号的普通字符 .看起来你真正问的问题是“How do I remove diacritics from a string(或者在这种情况下,文件路径)?” .
或许你不是在问这个问题,而你真的想要找到一个名字的文件:
(或类似的东西) . 在这种情况下,您需要尝试打开具有相同名称的文件,而不是
c:\bloh\bleh
.看起来路径中的“bleh”是目录,而不是文件 . 要检查文件夹是否存在,请使用Directory.Exists方法 .
问题是:程序没有足够的权限来访问该文件 . 修复权限修复了问题 . 似乎当我没有进行实验时,我设法重现了权限问题,可能是通过手工创建没有非ascii字符的文件夹并复制另一个 .
哦......太尴尬了 .