2011-12-13 48 views

Trả lời

7

Bạn có thể sử dụng chức năng API UrlCreateFromPath.

Đây là ví dụ:

uses 
    ComObj, WinInet, ShLwApi; 

function FilePathToURL(const FilePath: string): string; 
var 
    BufferLen: DWORD; 
begin 
    BufferLen := INTERNET_MAX_URL_LENGTH; 
    SetLength(Result, BufferLen); 
    OleCheck(UrlCreateFromPath(PChar(FilePath), PChar(Result), @BufferLen, 0)); 
    SetLength(Result, BufferLen); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    ShowMessage(FilePathToURL('C:\Users\Documents\File.txt')); 
end; 
+1

Cảm ơn câu trả lời, như tôi có thể thấy bạn với Remy Lebeau đề xuất cùng một chức năng. Tôi có thể hỏi bạn, liệu FilePath từ tham số của hàm có tồn tại hay hàm UrlCreateFromPath hoạt động với nó như một chuỗi đơn giản? –

+0

['UrlCreateFromPath'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773773%28v=VS.85%29.aspx) lấy đường dẫn nhập làm chuỗi để nó không không quan trọng nếu con đường mục tiêu thực sự tồn tại. – TLama

8

Nhìn vào UrlCreateFromPath(). Lưu ý rằng, hãy cẩn thận với sơ đồ file:. Nó không phải là stanardized trên nền tảng. Có nhiều định dạng để thể hiện cùng một đường dẫn theo nhiều cách khác nhau, ngay cả trong Windows. Kể từ IE4, API Win32 tiêu chuẩn hóa trên một định dạng duy nhất, nhưng các định dạng khác vẫn tồn tại.

+0

Cảm ơn bạn đã trả lời. Về sơ đồ tệp, điều đó có nghĩa là kết quả từ hàm UrlCreateFromPath có thể khác và phụ thuộc vào trình cài đặt Interner Explorer không? Tôi hy vọng không ai có IE4 tại thời điểm này, nhưng tôi cần phải dựa vào chức năng này. –

+1

'UrlCreateFromPath()' được giới thiệu trong IE5 trên Win98SE và Win2K. Microsoft đã tiêu chuẩn hóa việc sử dụng lược đồ 'file:' trong IE4. Miễn là bạn đang chuyển xung quanh URL của bạn đến Shell API, bạn sẽ ổn thôi. –

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