Delphi:如何检查文件是否存在(路径超过255个字符)

Delphi:如何检查文件是否存在(路径超过255个字符),delphi,winapi,Delphi,Winapi,我需要使我的delphi应用程序能够检查使用Robocopy复制的文件在路径超过255个字符时是否存在。 我尝试了通常的“If FileExists(MyFile)then…”,但即使文件存在,它也总是返回“false” 我还试图得到文件的日期,但我得到1899/12/30,这可以被视为一个空的日期 文件搜索也不会返回任何内容。在文件名前面加上\\?\以启用扩展长度路径解析。比如你会写 if FileExists('\\?\'+FileName) then .... 请注意,只有在调用Wi

我需要使我的delphi应用程序能够检查使用Robocopy复制的文件在路径超过255个字符时是否存在。 我尝试了通常的“If FileExists(MyFile)then…”,但即使文件存在,它也总是返回“false”

我还试图得到文件的日期,但我得到1899/12/30,这可以被视为一个空的日期


文件搜索也不会返回任何内容。

在文件名前面加上
\\?\
以启用扩展长度路径解析。比如你会写

if FileExists('\\?\'+FileName) then
  ....
请注意,只有在调用Win32 API函数的Unicode版本时,这才有效。因此,如果您使用Unicode Delphi,那么这将完成这项工作。否则,您必须使用自己版本的调用Unicode版本API函数的
FileExists


这些问题在MSDN上进行了详细讨论。

谢谢您的回复。此解决方案在本地路径(如e:\myfilepath)上非常有效,但我仍然坚持使用UNC路径,即使“如果文件存在('\?\UNC\'+MyFile),那么…”UNC路径在这里也可以正常工作。我很有信心我的答案就是你所需要的。还有别的事情会出问题。一旦你有了“\\?”前缀,你就超过了260的限制。@Fab:如果
MyFile
包含一个标准UNC路径,你必须在前缀
“\\?\UNC\”
之前从中删除前导的
“\\”
。依我看,
'\\server\path'
需要变成
'\\?\UNC\server\path'
,而不是像您的代码当前所做的那样。
'\\?\UNC\\\\server\path'
。雷米说的是准确的。也许这就是你的问题。我链接的那篇文章也是这么说的。雷米是对的,我忘了这一点。我必须使用“如果copy(MyFile,0,2)='\\',那么MyFile:=StringReplace(MyFile,'\\','\\?\UNC\',[rfReplaceAll,rfIgnoreCase]);”那么FileExists工作得很好。谢谢