我想检查我的字符串是否是有效的Windows文件路径。我在四处寻找,似乎没有可靠的方法来做到这一点。我还检查了boost文件系统库,并且没有明显的功能来执行此检查,可能类似于is_valid_windows_name
答案 0 :(得分:1)
答案 1 :(得分:1)
我不相信有一个标准的c ++ api。
请注意,Windows API允许的文件名多于Windows Shell(允许用户在windws资源管理器中使用的文件名)。
你应该看一下windows shell api。
另一种可能性是使用反复试验,这样你就可以真正独立于当前的文件系统。
最简单的方法是禁止
\ /< > | “:?*
你应该没事。
答案 2 :(得分:1)
是的,有一个提升功能可以满足您的需求。看一下boost :: filesystem :: windows_name(...)。您需要包含boost / filesystem / path.hpp以及链接到正确的(特定于版本和体系结构的)libboost_system和libboost_filesystem库,因为path不是仅限标头的lib。
答案 3 :(得分:0)
很遗憾,即使最新的C ++ 17文件系统库也没有验证文件名的功能。
您可以使用特定于Windows的Shell Lightweight Utility function PathFileExists
或Windows API GetFileAttributes
,并专门针对ERROR_INVALID_NAME
检查上一个错误代码。
我认为这是一种误用(因为它确实应该有一个专门的功能)但是有目的。