2

C#(4.0)で、2つのファイル名が同じファイルを参照しているかどうかを、できればそれらを開かずに確認する方法はありますか?

つまり、相対パスがdを指している場合、d:\x.txtはx.txtまたは../x.txtと等しくなければなりません。

4

3 に答える 3

7

Path.GetFullPath両方の名前で使用する場合、それらは同じ文字列に解決されるはずです。

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

次に、同じファイルを参照する場合fullPath1は等しくなります。fullPath2Windowsファイル名では大文字と小文字が区別されないため、大文字と小文字を区別しない比較を行うようにしてください。

于 2012-08-05T12:12:36.990 に答える
4

おそらくこれはあなたのために働きますか?

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

if (file1.FullName == file2.FullName) {
    // yes, they match..
于 2012-08-05T12:12:36.133 に答える
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を実行するため、==演算子を使用して大文字と小文字のみが異なるパスを比較しても、目的の結果は得られません。

于 2015-10-21T12:10:03.177 に答える