C# (4.0) 中有没有办法检查两个文件名是否引用同一个文件,最好不打开它们?
即 d:\x.txt 应该等于 x.txt 或 ../x.txt 如果相对路径指向 d。
如果您同时使用Path.GetFullPath
这两个名称,它们应该解析为相同的字符串:
string fullPath1 = Path.GetFullPath(absolutePath);
string fullPath2 = Path.GetFullPath(relativePath);
如果它们引用相同的文件,则fullPath1
应该相等。fullPath2
确保进行不区分大小写的比较,因为 Windows 文件名不区分大小写。
也许这对你有用?
FileInfo file1 = new FileInfo(@"D:\x.txt");
FileInfo file2 = new FileInfo(@"..\x.txt");
if (file1.FullName == file2.FullName) {
// yes, they match..
是的,使用Path.GetFullPath
然后不区分大小写的比较:
var file1 = Path.GetFullPath(@"C:\TEMP\A.TXT");
var file2 = Path.GetFullPath(@"a.txt"); // Assuming current directory is C:\TEMP
// Test 1 (good)
if (file1.Equals(file2, StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("Test 1: they match");
}
// Test 2 (fails when file paths differ by case)
if (file1 == file2)
{
Console.WriteLine("Test 2: they match");
}
大多数人在不区分大小写的文件系统上运行 .NET,因此使用==
运算符比较仅按大小写不同的路径不会产生所需的结果。