检查文件名是有效的Windows名称

时间:2010-06-21 13:58:11

标签: c++ windows file filesystems

我想检查我的字符串是否是有效的Windows文件路径。我在四处寻找,似乎没有可靠的方法来做到这一点。我还检查了boost文件系统库,并且没有明显的功能来执行此检查,可能类似于is_valid_windows_name

4 个答案:

答案 0 :(得分:1)

您可以使用_splitpath()函数并解析输出(基于它,您可以很容易地说出您的路径是否有效)。

有关其他信息,请参阅MSDN

请注意,此功能是特定于Windows的。

答案 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 PathFileExistsWindows API GetFileAttributes,并专门针对ERROR_INVALID_NAME检查上一个错误代码。

我认为这是一种误用(因为它确实应该有一个专门的功能)但是有目的。