检查两个文件名是否引用同一文件

时间:2012-08-05 12:08:26

标签: c# file c#-4.0 io

C#(4.0)中是否有办法检查两个文件名是否引用同一个文件,最好不要打开它们?

即。如果相对路径指向d,则d:\ x.txt应等于x.txt或../x.txt。

3 个答案:

答案 0 :(得分:6)

如果您对两个名称都使用Path.GetFullPath,则应解析为相同的字符串:

string fullPath1 = Path.GetFullPath(absolutePath);
string fullPath2 = Path.GetFullPath(relativePath);

如果fullPath1引用相同的文件,fullPath2应该等于{{1}}。确保您进行不区分大小写的比较,因为Windows文件名不区分大小写。

答案 1 :(得分:4)

也许这适合你?

FileInfo file1 = new FileInfo(@"D:\x.txt");
FileInfo file2 = new FileInfo(@"..\x.txt");

if (file1.FullName == file2.FullName) {
    // yes, they match..

答案 2 :(得分:2)

是的,使用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,因此使用==运算符比较仅根据大小写不同的路径将不会产生所需的结果。