gpt4 book ai didi

delphi - 查找长(>255)文件名

转载 作者:行者123 更新时间:2023-12-03 14:51:12 26 4
gpt4 key购买 nike

有一些文件夹,里面有超过 100 个文件。但所有文件和文件夹名称都因错误的编码名称(UTF->ANSI)而损坏。

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

常规函数 Utf8ToAnsi 解决了这个问题,但 FindFirst 无法搜索名称长度超过 255 个符号的文件夹。

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

最佳答案

FindFirst 包装了 Win32 API 函数 FindFirstFile ,如果您在传入的路径前添加 \\?\ ,例如 \\?\C:\,该函数的 Unicode 版本可以搜索最长 32,767 个字符的路径文件夹\文件夹\*

由于 Delphi 2009 及更高版本为您调用 Unicode 函数,因此您只需使用 FindFirst 和 co 即可。对于 Delphi 2007 及更早版本(ANSI 版本),您需要直接从 Windows.pas 调用 FindFirstFile/FindNextFile/FindClose。欲了解更多信息,请查看Naming a file平台 SDK 部分。

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

不过 shell(资源管理器)不支持此功能,因此对于 SHFileOperation(删除到回收站)或 等操作,您仍然需要将它们限制为最多 MAX_PATH 个字符Shell执行。在许多情况下,您可以通过传入 DOS 8.3 名称而不是长名称来解决该问题。 FindFirst 的 TSearchRec 不会公开短名称,但 FindFirstFile 的 TWin32FindData 结构会公开短名称,如 cAlternateFileName

关于delphi - 查找长(>255)文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3457652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com