2011-12-13 12 views

risposta

7

È possibile utilizzare la funzione API UrlCreateFromPath.

Ecco l'esempio:

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

Grazie per la risposta, come posso vedere con Remy Lebeau ha suggerito la stessa funzione. Posso chiederti se il FilePath del parametro della funzione esiste o se la funzione UrlCreateFromPath funziona con essa come con una stringa semplice? –

+0

Il ['UrlCreateFromPath'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773773%28v=VS.85%29.aspx) prende il percorso di input come una stringa in modo che non importa se il percorso di destinazione esiste realmente. – TLama

8

sguardo a UrlCreateFromPath(). Si noti che esistono comunque avvertimenti con lo schema file:. Non è standardizzato su tutte le piattaforme. Esistono diversi formati per rappresentare lo stesso percorso in modi diversi, anche solo sotto Windows. Da IE4, l'API Win32 si standard su un singolo formato, ma esistono ancora altri formati.

+0

Grazie per la risposta. Informazioni sullo schema di file, vuol dire che il risultato della funzione UrlCreateFromPath potrebbe differire e dipende dall'interner Explorer installato? Spero che nessuno abbia IE4 in questo momento, ma devo fare affidamento su questa funzione. –

+1

'UrlCreateFromPath()' è stato introdotto in IE5 su Win98SE e Win2K. Microsoft ha standardizzato il suo uso dello schema 'file:' in IE4. Finché stai passando il tuo URL alle sole API della Shell, dovresti stare bene. –

Problemi correlati