可能重复:
Best way to determine if two path reference to same file in C#
所以我需要比较两个Windows文件名,以确定它们是否相同。一个用户给了我,一个给了我另一个程序。那么应该如何进行比较:
C:\Program Files\Application1\APP.EXE C:\Progra~1\Applic~1\APP.EXE C:\program files\applic~1\app.exe
我似乎无法找到一种方法来始终“规范化”路径,我尝试使用Path.GetFullPath(路径)和新的FileInfo(路径).FullName,似乎都没有解决这个问题。
更新:
Path.GetFullPath(path)将更正短到长名称转换,但不会对大小写进行规范化。因此需要StringComparer.OrdinalIgnoreCase.Equals(path1,path2)。
答案 0 :(得分:3)
您需要Path.GetFullPath()
+不区分大小写的字符串比较。
运行以下代码:
using System;
using System.IO;
class Test {
static void Main ()
{
//string [] str = new string[] {@"c:\program files\vim\vim72", @"c:\progra~1\vim\vim72"};
string [] str = new string[] {@"c:\program files\Refere~1\microsoft", @"c:\progra~1\Refere~1\microsoft"};
foreach (string s in str) {
// Call s = Environment.ExpandEnvironmentVariables (s) if needed.
Console.WriteLine (Path.GetFullPath (s));
}
}
}
给出:
c:\program files\Reference Assemblies\microsoft
c:\Program Files\Reference Assemblies\microsoft
答案 1 :(得分:0)
一个简短的测试运行说下面的代码适用于给定的路径:
bool CompareFileName(string file1, string file2)
{
var directory1 = Path.GetDirectoryName(file1);
var directory2 = Path.GetDirectoryName(file2);
var fileName1 = Path.GetFileName(file1);
var fileName2 = Path.GetFileName(file2);
return directory1.Equals(directory2, StringComparison.InvariantCultureIgnoreCase) &&
fileName1.Equals(fileName2, StringComparison.InvariantCultureIgnoreCase);
}
这假设是Windows平台(由于以窗口为中心的路径作为示例路径而做出的假设)
答案 2 :(得分:0)
我使用FileInfo对象。如果您创建实际存在的文件的fileinfo对象,则Directory属性会提供格式良好的路径名。
您还可以获得测试文件是否确实存在的额外好处。