2012-05-05 30 views
5

Tôi có một tình huống mà người dùng có thể chỉ định hai tên đường dẫn riêng biệt và tôi cần kiểm tra xem một tên đường dẫn có phải là "bên trong" hay không. Tôi có thể làm điều này nếu cả hai tên đường dẫn là UNC, hoặc cả hai đều là ký tự ổ đĩa, nhưng nếu chúng được trộn lẫn thì sao?Delphi - So sánh hai tên đường dẫn khi một là UNC và một tên ổ đĩa được chỉ định

Bạn có thể "chuẩn hóa" đường dẫn như "C: \ Program Files" thành "\\ [tên máy tính này] \ C \ Program Files" không? Rõ ràng, tôi không thể đi theo cách khác, như một thư mục mạng trong định dạng UNC có thể không có một ký tự ổ đĩa tương ứng ánh xạ tới nó.

Trả lời

6

Hãy xem chức năng ExpandUNCFileName.

+0

+1 Ngoài ra, chức năng [WNetGetUniversalName] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa385474%28v=vs.85%29.aspx) cũng có thể giúp bạn. – RRUZ

+0

(@RRUZ, không phải là 'ExpandUNCFileName' một trình bao bọc cho' WNetGetUniversalName', hoặc bạn có thể học nhiều hơn với lời gọi đó không?) Tôi đã nghĩ sai rằng 'ExpandUNCFilename' không hoạt động trong mọi trường hợp, nhưng một chút kỹ lưỡng hơn thử nghiệm cho thấy rằng nếu 'expandUNCFileName' không trả về một tên bắt đầu bằng' \\ 'của nó vì nó là một ổ đĩa cục bộ. Vì vậy, một đường dẫn không thể ở bên trong nếu một trong các phiên bản 'ExpandUNCFileName''d của chúng bắt đầu bằng một ký tự ổ đĩa. – rossmcm

+0

Có 'expandUNCFileName' gọi hàm 'WNetGetUniversalName' nhưng với cờ' UNIVERSAL_NAME_INFO_LEVEL', bạn có thể sử dụng hàm này với giá trị 'REMOTE_NAME_INFO_LEVEL'. Vì vậy, bạn có thể xây dựng một giải pháp hoàn chỉnh hơn bằng cách sử dụng trực tiếp chức năng NetGetUniversalName. – RRUZ