对于Url类型文件路径,File.Exists返回false

时间:2016-07-07 11:58:32

标签: c# macos mono

我必须处理像

这样的文件路径
file:///My%20HD/files/06.%20test%20Lastname%20-%20test.mp3

该文件确实存在,我可以访问它。

但是System.IO.File.Exist()返回false。

我猜问题是文件路径格式。我怎么处理它?

1 个答案:

答案 0 :(得分:1)

使用Uri.LocalPath将文件URL转换为实际文件路径,例如:

Uri uriAddress2 =  new Uri(@"file:///h:/test.html");
Console.WriteLine(uriAddress2.LocalPath);
Console.WriteLine(File.Exists(uriAddress2.LocalPath));

文件URL不是有效的文件路径,本地或UNC。 File.Exists仅检查文件路径是否实际对应于真实文件。

事实上,正如Caramiriel在评论中指出的那样,Exists最终调用NormalizePath明确拒绝URI,因为许多Win32 API无法处理它们

File.Exits的Mono版本,就像.NET一样,checks为特定路径检索的文件属性。 GetFileAttributes是一个外部调用,可能最终调用等效的Win32 API函数,因此文件URL将无法正常工作