代码之家  ›  专栏  ›  技术社区  ›  Andrew Rumm

查找长(>255)文件名

  •  7
  • Andrew Rumm  · 技术社区  · 16 年前

    但所有文件和文件夹名称都被错误的编码名称打断(UTF->ANSI)。

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

    Utf8ToAnsi 找到了,但是 FindFirst 无法搜索名称长度超过255个符号的文件夹。

    2 回复  |  直到 13 年前
        1
  •  13
  •   BenMorel Manish Pradhan    12 年前

    FindFirst包装Win32 API函数 FindFirstFile ,Unicode版本的函数可以搜索最长32767个字符的路径 \\?\ 你走过的路,就像 \\?\C:\Folder\Folder\*

    由于Delphi2009和更新的版本为您调用Unicode函数,您可以在那里使用FindFirst和co。对于Delphi2007和更早版本(ANSI版本),您需要调用 FindFirstFile/FindNextFile/FindClose 从 Windows.pas Naming a file 平台SDK的一节。

    注意使用 但是禁用各种位的路径处理,因此请确保它是一个完全限定的路径,没有任何“.”或“..”条目。您可以使用相同的技巧打开文件流、重命名或复制路径较长的文件。

    但是shell(Explorer)不支持这一点,所以您仍然需要将这些限制为最多MAX\u路径字符,例如 SHFileOperation (删除到回收站)或 ShellExecute TWin32FindData 结构按 cAlternateFileName

        2
  •  0
  •   Rob Kennedy    16 年前

    更改当前目录( ChDir )你知道的最深的人,然后通过 到 FindFirst 或 FindFirstFile

    该文件名中没有路径组件超过MAX\u path字符,因此您应该能够一步一步地进入目录。