Как правильно сравнить два имени файлов, чтобы узнать, являются ли они одним и тем же файлом? [дубликат]
Возможные Дубликаты:
лучший способ определить, ссылаются ли два пути на один и тот же файл в C#
поэтому у меня есть два имени файлов Windows, которые мне нужно сравнить, чтобы определить, одинаковы ли они. Один пользователь дал мне, один дал мне другая программа. Так как же!--11-->должны вы сравниваете:
C:Program FilesApplication1APP.EXE C:Progra~1Applic~1APP.EXE C:program filesapplic~1app.exe
Я не могу найти способ последовательно "нормализовать" путь, я попытался использовать путь.GetFullPath(путь) и новый FileInfo может(Путь).FullName и, похоже, не решает этого.
обновление:
путь.GetFullPath (путь) исправит преобразование короткого в длинное имя, но не нормализует регистр. Таким образом, StringComparer.OrdinalIgnoreCase.Требуется Equals (path1, path2).
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
короткий тестовый запуск говорит, что приведенный ниже код будет работать для заданных путей:
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 (предположение, сделанное из-за центральных путей windows, приведенных в качестве примера путей)
Я использую объект FileInfo. Если вы создаете объект fileinfo файла, который фактически существует, свойство Directory дает красиво отформатированное имя пути.
вы также получаете дополнительное преимущество в возможности проверить, действительно ли файл существует.