2011-12-13 11 views

Odpowiedz

7

Można użyć funkcji API UrlCreateFromPath.

Oto przykład:

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

Dzięki za odpowiedź, jak widzę z Remy Lebeau zasugerował tę samą funkcję. Czy mogę zapytać, czy istnieje opcja FilePath z parametru funkcji, czy funkcja UrlCreateFromPath działa z nią tak samo, jak z pustym łańcuchem? –

+0

['UrlCreateFromPath'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773773%28v=VS.85%29.aspx) przyjmuje ścieżkę wejściową jako ciąg znaków, więc nie ma ma znaczenie, czy ścieżka docelowa rzeczywiście istnieje. – TLama

8

Look w UrlCreateFromPath(). Pamiętaj jednak, że istnieją zastrzeżenia ze schematem file:. Nie jest stanardyzowany na różnych platformach. Istnieje wiele formatów reprezentujących tę samą ścieżkę na różne sposoby, nawet w systemie Windows. Od IE4, Win32 API standaryzuje się na jednym formacie, ale inne formaty nadal istnieją.

+0

Dzięki za odpowiedź. O schemacie plików, czy to oznacza, że ​​wynik funkcji UrlCreateFromPath może się różnić i zależy od zainstalowanego programu Interner Explorer? Mam nadzieję, że nikt nie ma obecnie IE4, ale muszę polegać na tej funkcji. –

+1

'UrlCreateFromPath()' wprowadzono w IE5 na Win98SE i Win2K. Microsoft wystandaryzował wykorzystanie schematu 'file:' w IE4. Dopóki przekazujesz adres URL tylko do interfejsów API Shell, powinieneś być w porządku. –

Powiązane problemy