【发布时间】:2009-08-19 06:36:38
【问题描述】:
我得到一个或多或少看起来像这样的字符串:
"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 字符,它也会变成一个有效的路径?
【问题讨论】:
-
字符串从何而来;它是编码到代码文件中还是由用户提供?
-
Fredrik Mörk,我刚刚将该信息添加到问题本身。
-
这很奇怪。我创建了一个具有相同路径和名称的文件,下面的代码打印出
"True":FileInfo fi = new FileInfo("C:\\bláh\\bleh"); Console.WriteLine(fi.Exists); -
您的应用生成的“á”代码是什么?这个字符的代码是什么,如果从路径中获取它(找到“C:\”上的所有文件夹,找到这个特定的文件夹并查看调试代码)?