Delphi: как проверить, существует ли файл (путь более 255 символов)

Мне нужно заставить приложение delphi проверить, есть ли файл, скопированный с помощью Robocopy, или нет, когда его путь превышает 255 символов. Я попробовал обычный "If FileExists (MyFile) then...", но он всегда возвращает "false", даже если файл есть.

Я также пытался получить дату файла, но получаю 1899/12/30, который можно считать пустой.

Поиск файла также не возвращает ничего.

Ответ 1

Префикс имени файла \\?\, чтобы разрешить синтаксический анализ пути большой длины. Например, вы пишете

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

Обратите внимание, что это будет работать, только если вы вызываете Unicode-версии функций Win32 API. Поэтому, если вы используете Unicode Delphi, тогда это выполнит эту работу. В противном случае вам придется свернуть собственную версию FileExists, которая вызывает Unicode-версии функций API.

Эти проблемы подробно обсуждаются в MSDN: Именование файлов, путей и пространств имен.