我想使用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中找到的函数,它们通常不支持长路径
答案 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路径。