2009-11-17 4 views
6

가능한 중복 : 두 파일 이름이 같은 파일인지 비교하는 올바른 방법은 무엇입니까?


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를 찾을 수 없습니다 및 어느 쪽도 이것을 해결하는 것 같지 않습니다.

UPDATE :

Path.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 
+0

downvote에서 망치질 전에이 빠른 것을 삭제하십시오 ... –

+0

그것은 저를 위해 여기에서 작동합니다. 나는 c : \ Progra ~ 1 \ Refere ~ 1 \ Microsoft와 c : \ Program Files \ Referenced Assemblies \ microsoft를 시도했다 ... – Gonzalo

+0

분명히 그는 그것을 시도했다. 나는 똑같은 것을 올렸고 즉시 3 개의 downvotes를 얻었다. –

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 플랫폼 (예제 중심 경로로 주어진 Windows 중심 경로로 인해 가정 됨)

0

FileInfo 개체를 사용합니다. 실제로 존재하는 파일의 fileinfo 객체를 생성하면 Directory 속성은 정교하게 형식화 된 경로 이름을 제공합니다.

파일이 실제로 존재하는지 테스트 할 수 있다는 추가적인 이점이 있습니다.

관련 문제