我想检查我的字符串是否是有效的Windows文件路径。我搜索了一下,好像没有可靠的方法来做到这一点。我还检查了boost文件系统库,似乎没有明显的函数存在来进行此检查,也许类似于is_valid_windows_name的功能。
我想检查我的字符串是否是有效的Windows文件路径。我搜索了一下,好像没有可靠的方法来做到这一点。我还检查了boost文件系统库,似乎没有明显的函数存在来进行此检查,也许类似于is_valid_windows_name的功能。
我不相信有一个标准的C++ API可以做到这一点。
请注意,Windows API允许使用比Windows Shell更多的文件名(用户在Windows资源管理器中允许使用的文件名)。
您应该查看Windows Shell API。
另一个可能性是使用试错法,这样您就可以真正独立于当前的文件系统。
最简单的方法是禁止使用以下字符:
\ / < > | " : ? *
这样你就没问题了。
是的,有一个提升功能可以实现你想要的效果。请查看boost::filesystem::windows_name(...)。你需要包含boost/filesystem/path.hpp,并链接正确(版本和体系结构特定的)libboost_system和libboost_filesystem库,因为path不是一个仅头文件的库。
可惜的是,即使是最新的C++17文件系统库也没有验证文件名的功能。
您可以使用Windows特定的Shell轻量级实用程序函数PathFileExists
或Windows APIGetFileAttributes
并检查最后一个错误代码是否为ERROR_INVALID_NAME
。
我认为这有点滥用(因为确实应该有专门的功能),但它能够达到目的。