Boost.Filesystem中的MAX_PATH限制

时间:2011-01-05 16:10:08

标签: c++ winapi boost max-path

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

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

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

由于

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

2 个答案:

答案 0 :(得分:4)

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

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

我不知道是否计划修复。请参阅this有关如何完成的信息。

答案 1 :(得分:-2)

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

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

例如,删除Boost.Filesystem的函数将失败,长度超过MAX_PATH长度路径。您希望Boost.Filesystem执行更改当前目录和使用相对路径来阻止MAX_PATH限制的操作吗?我认为不可能。

<强> EDITED

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

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