2013-06-01 6 views
10

Ho bisogno di rendere la mia app delphi in grado di verificare se un file copiato usando Robocopy è presente o meno quando il suo percorso supera i 255 caratteri. Ho provato il solito "If FileExists (MyFile) then ..." ma restituisce sempre "false" anche se il file è lì.Delphi: come verificare se esiste un file (percorso oltre 255 caratteri)

Ho anche cercato di ottenere la data del file ma ottengo 1899/12/30 che può essere considerata una data vuota.

Una ricerca di file non restituisce nulla.

risposta

9

Prefisso il nome del file con \\?\ per abilitare l'analisi del percorso di lunghezza estesa. Ad esempio, scrivere

if FileExists('\\?\'+FileName) then 
    .... 

Si noti che ciò funzionerà solo se si stanno chiamando le versioni Unicode delle funzioni API Win32. Quindi se usi un Unicode Delphi allora questo farà il lavoro. Altrimenti dovrai caricare la tua versione di FileExists che chiama le versioni Unicode delle funzioni API.

Questi problemi sono discussi in modo approfondito su MSDN: Naming Files, Paths, and Namespaces.

+0

Grazie per la risposta. Questa soluzione funziona alla grande con percorsi locali come e: \ myfilepath ma rimango bloccato con percorsi UNC, anche con "Se FileExists ('\\? \ UNC \' + MyFile) poi ..." – Fab

+0

I percorsi UNC funzionano bene qui. Sono abbastanza fiducioso che la mia risposta è tutto ciò di cui hai bisogno. Qualcos'altro sarà sbagliato. Una volta che hai il prefisso '\\? \' Hai sfuggito il limite 260. –

+3

@Fab: Se 'MyFile' contiene un percorso UNC standard, devi rimuovere il principale' '\\ '' da esso quando prepari il prefisso '\\ \\? UNC \''. IOW, ''\\ server \ percorso'' deve diventare'' \\? \ UNC \ server \ percorso'', non ''\\? \ UNC \\\ server \ percorso'' come il tuo codice sta attualmente facendo . –

Problemi correlati