FindFirst оборачивает функцию Win32 API FindFirstFile , и версия этой функции в Юникоде может искать пути длиной до 32 767 символов, если вы добавляете \\?\
к пути, по которому вы проходите, например \\?\C:\Folder\Folder\*
.
Поскольку Delphi 2009 и новее вызывают функции Unicode для вас, вы можете просто использовать FindFirst и co там.Для Delphi 2007 и более ранних версий (версии ANSI) вам нужно будет напрямую позвонить по номеру FindFirstFile/FindNextFile/FindClose
из Windows.pas
.Для получения дополнительной информации проверьте раздел Naming a file SDK платформы.
Обратите внимание, что использование \\?\
отключает различные биты обработки пути, поэтому убедитесь, что это полный путь безлюбой '.'или «..» записи.Вы можете использовать тот же трюк, чтобы открывать файловые потоки, переименовывать или копировать файлы с более длинными путями.
Оболочка (Проводник) не поддерживает это, поэтому вам все равно нужно ограничить их не более MAX_PATH-символамидля таких вещей, как SHFileOperation
(для удаления в корзину) или ShellExecute
.Во многих случаях вы можете обойти эту проблему, передавая имена DOS 8.3 вместо длинных.FindFirst TSearchRec не предоставляет короткие имена, но структура FindFirstFile TWin32FindData
работает как cAlternateFileName
.