File.Exists 为 Url 类型文件路径返回 false

本文关键字:路径 返回 false 文件 类型 Exists Url File | 更新日期: 2023-09-27 17:55:48

我必须处理像这样的文件路径

file:///My%20HD/files/06.%20test%20Lastname%20-%20test.mp3

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

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

我想问题是文件路径格式。我该如何处理它?

File.Exists 为 Url 类型文件路径返回 false

使用 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在评论中指出的那样,Exist最终调用了NormalizePath,它明确拒绝URI,因为许多Win32 API无法处理它们。

File.Exit 的 Mono 版本与 .NET 一样,检查为特定路径检索的文件属性。 GetFileAttributes是一个外部调用,最终可能会调用等效的 Win32 API 函数,因此文件 URL 将不起作用