2010-08-11 45 views
7

有一些文件夹上有超过100个文件。 但所有文件和文件夹名称都使用错误的编码名称(UTF-> ANSI)打乱。查找long(> 255)文件名

"C:\...\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\Госдача-Лечебни корпус\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\..." 

常规功能Utf8ToAnsi finxing,但FindFirst不能超过225个字符,名称搜索文件夹。

它给了我只有70/100个文件。

回答

13

FindFirst包装Win32 API函数FindFirstFile,如果您将\\?\添加到传入的路径中,则该函数的Unicode版本可以搜索长达32,767个字符的路径,例如\\?\C:\Folder\Folder\*

由于Delphi 2009和更新版本为您调用Unicode函数,因此您可以使用FindFirst和co。对于德尔福2007和更早版本(ANSI版本),您需要直接拨打Windows.pas致电FindFirstFile/FindNextFile/FindClose。有关更多信息,请查看平台SDK的Naming a file部分。

请注意,使用\\?\会禁用各种路径处理位,所以请确保它是完全合格的路径,不含'。'。或'..'条目。您可以使用相同的技巧打开文件流,重命名或复制具有更长路径的文件。

虽然shell(资源管理器)不支持这个功能,但您仍然需要将这些限制为最多MA​​X_PATH个字符,例如SHFileOperation(要删除回收站)或ShellExecute。在许多情况下,您可以通过传入DOS 8.3名称而不是长名称来解决此问题。 FindFirst的TSearchRec不公开短名称,但FindFirstFile的TWin32FindData结构的作用是cAlternateFileName

0

改变当前目录(ChDir)你知道,和最深的一个,然后通过一个相对路径FindFirstFindFirstFile

该文件名中没有路径组件长于MAX_PATH字符,因此您应该能够一步一步地进入目录。

请注意,多线程程序可能对当前目录中的更改敏感,因为进程只有一个当前目录由所有线程共享。