2013-06-01 57 views
10

我需要讓我的delphi應用程序能夠檢查當它的路徑超過255個字符時,使用Robocopy複製的文件是否存在。 我試過平常的「If FileExists(MyFile)then ...」,但即使文件存在,它也總是返回「false」。德爾福:如何檢查一個文件是否存在(超過255個字符的路徑)

我也嘗試獲取文件的日期,但我得到1899/12/30這可以被視爲空的日期。

文件搜索也不會返回任何內容。

回答

9

使用\\?\前綴文件名以啓用擴展長度路徑分析。例如,你會寫

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

請注意,只有在調用Win32 API函數的Unicode版本時,這纔會起作用。所以,如果你使用一個Unicode德爾福,那麼這將完成這項工作。否則,你將不得不推出你自己的版本FileExists,它調用Unicode版本的API函數。

這些問題在MSDN上詳細討論:Naming Files, Paths, and Namespaces

+0

感謝您的回覆。這個解決方案在e:\ myfilepath等本地路徑下工作良好,但我仍然堅持使用UNC路徑,即使使用「如果FileExists('\\?\ UNC \'+ MyFile),那麼......」 – Fab

+0

UNC路徑在此處正常工作。我非常有信心,我的答案就是你所需要的。別的什麼都會是錯的。一旦你有'\\?\'前綴,你已經逃脫了260的限制。 –

+3

@Fab:如果'MyFile'包含一個標準的UNC路徑,當前綴''\\?\ UNC \''前綴時,必須刪除前導''\\''。 IOW,''\\ server \ path''需要變成''\\?\ UNC \ server \ path'',而不是''\\?\ UNC \\\ server \ path''就像您的代碼正在執行。 –

相關問題