11

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

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

因此,我正在寻找有关 MAX_PATH 和 Boost.FS 的任何有用信息。

谢谢

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

4

2 回答 2

4

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

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

我不知道是否计划修复。看看这个应该怎么做。

于 2011-03-09T10:58:31.917 回答
-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 路径。

于 2011-01-05T16:44:17.463 回答