2009-11-17 26 views
6

thể trùng lặp:
Best way to determine if two path reference to same file in C#Cách nào đúng để so sánh hai tên tệp để xem chúng có phải là cùng một tệp không?

Vì vậy, tôi có hai tên tập tin Windows tôi cần phải so sánh để xác định xem họ đều giống nhau. Một người dùng đã đưa cho tôi, một người được tôi cho một chương trình khác trao cho tôi. Vậy làm thế nào nên bạn so sánh:

 
C:\Program Files\Application1\APP.EXE 
C:\Progra~1\Applic~1\APP.EXE 
C:\program files\applic~1\app.exe 

tôi dường như không thể tìm thấy một cách để liên tục 'bình thường' con đường, tôi đã cố gắng sử dụng Path.GetFullPath (đường dẫn) và mới FileInfo (đường dẫn) .FullName và dường như không giải quyết được điều này.

UPDATE:

Path.GetFullPath (đường dẫn) sẽ sửa ngắn để chuyển đổi tên dài nhưng nó sẽ không bình thường như vậy. Vì vậy, một StringComparer.OrdinalIgnoreCase.Equals (path1, path2) là bắt buộc.

Trả lời

3

Bạn sẽ cần Path.GetFullPath() trường hợp so sánh chuỗi không phân biệt chữ hoa chữ thường.

Chạy đoạn mã sau:

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)); 
    } 
} 
} 

cho:

c:\program files\Reference Assemblies\microsoft 
c:\Program Files\Reference Assemblies\microsoft 
+0

Xóa tính năng này nhanh chóng, trước khi bạn được rèn trên downvote ... –

+0

Nó phù hợp với tôi ở đây. Tôi đã thử c: \ Progra ~ 1 \ Refere ~ 1 \ Microsoft và c: \ Program Files \ Tham chiếu Assemblies \ microsoft ... – Gonzalo

+0

Dường như anh ta đã thử nó. Tôi đăng cùng một điều và có 3 downvotes ngay lập tức. –

0

một chạy thử nghiệm ngắn nói rằng mã dưới đây sẽ làm việc cho các đường dẫn đưa ra:

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); 
     } 

này giả định cửa sổ nền tảng (một giả định được thực hiện do đường dẫn trung tâm cửa sổ được đưa ra làm đường dẫn mẫu)

0

Tôi sử dụng đối tượng FileInfo. Nếu bạn tạo một đối tượng tệpinfo của một tệp thực sự tồn tại thuộc tính Thư mục cung cấp tên đường dẫn được định dạng độc đáo.

Bạn cũng nhận được lợi ích bổ sung khi có thể kiểm tra xem tệp có thực sự tồn tại hay không.

Các vấn đề liên quan