2011-12-13 27 views

Respuesta

7

Puede usar la función de API UrlCreateFromPath.

Aquí está el ejemplo:

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

Gracias por la respuesta, ya que puedo verte con Remy Lebeau sugirió la misma función. ¿Puedo preguntarle si el FilePath del parámetro de la función existe o la función UrlCreateFromPath funciona con él como con una cadena simple? –

+0

El ['UrlCreateFromPath'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773773%28v=VS.85%29.aspx) toma la ruta de entrada como una cadena por lo que doesn no importa si la ruta de destino realmente existe. – TLama

8

mirada a UrlCreateFromPath(). Tenga en cuenta que hay advertencias con el esquema file:, sin embargo. No está estancado en todas las plataformas. Existen múltiples formatos para representar la misma ruta de diferentes maneras, incluso bajo Windows. Desde IE4, la API de Win32 se estandariza en un solo formato, pero existen otros formatos.

+0

Gracias por la respuesta. Acerca del esquema de archivos, ¿significa que el resultado de la función UrlCreateFromPath puede diferir y depende del Interner Explorer instalado? Espero que nadie tenga IE4 en este momento, pero necesito confiar en esta función. –

+1

'UrlCreateFromPath()' se introdujo en IE5 en Win98SE y Win2K. Microsoft estandarizó su uso del esquema 'file:' en IE4. Siempre que esté pasando su URL a solo API de Shell, debería estar bien. –

Cuestiones relacionadas