【问题标题】:MAX_PATH limitation in Boost.FilesystemBoost.Filesystem 中的 MAX_PATH 限制
【发布时间】:2011-06-04 03:01:52
【问题描述】:

我想使用 Boost.Filesystem 库来操作路径、文件和目录。 我的问题是是否支持超过 MAX_PATH 的路径?

我知道在 Win32API 中我们有解决方法“\\?\”,但 PathAppend 和 PathCombine 等基本函数不支持它。

所以我正在寻找有关 MAX_PATH 和 Boost.FS 的任何有用信息。

谢谢

UPD:我关心路径追加、路径组合等所有操作(我在 Win32API 中有这些函数,但它们不适用于长于 MAX_PATH 的路径) 例如 CreateFileW 和 DeleteFileW 都支持长于 MAX_PATH 的路径。 Boost.FS 可以替代 Win32API 实用程序函数,例如 shlwapi 和 shell32 中的那些通常不支持长路径的函数

【问题讨论】:

    标签: c++ winapi boost max-path


    【解决方案1】:

    事实上,Windows 支持任意长度的路径,并且任何路径都可以在 Windows 上转换为字符串。在这种情况下需要添加\\?\,但这是“从给定路径中生成字符串”操作的一部分。

    AFAIK,Boost::FileSystem 在 Windows 上做错了。

    我不知道是否计划进行修复。请参阅this 了解如何完成。

    【讨论】:

      【解决方案2】:

      您可以使用或不使用 Boost.Filesystem 操作任意长度的文件系统路径字符串。

      MAX_PATH 是 Windows 文件 API 的限制。也就是说,您不能将过长的路径字符串传递给 Windows API。

      例如,Boost.Filesystem 的删除功能将因路径长度超过 MAX_PATH 长度而失败。您希望 Boost.Filesystem 执行更改当前目录并使用相对路径来防止 MAX_PATH 限制之类的操作吗?我不认为这是可能的。

      已编辑

      因为 Boost.Filesystem 是基于 C++ 字符串实现的,所以您无需担心路径长度。 Boost.Filesystem 不仅提供路径字符串操作方法,还提供文件系统操作方法。如果生成的路径太长,您应该避免使用文件系统方法。

      我不知道 Boost.Filesystem 是否支持 Win32 Unicode 路径,但您可以在调用 Win32 文件 API 之前将最终的 ANSI 路径转换为 ​​Unicode 路径。

      【讨论】:

      • “MAX_PATH 是 Windows 文件 API 的限制。”—这是不正确的,因为您可以关闭路径解析,从而允许更长的路径(请参阅问题以了解如何做到这一点)。
      • 是的,不是所有的都支持它们,但大多数内核 API 都支持,并且 OP 希望在 Boost.Filesystem 中得到这种支持。
      猜你喜欢
      • 2010-09-20
      • 2012-04-16
      • 2012-04-23
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 2015-06-08
      相关资源
      最近更新 更多