检查文件名是否是有效的 Windows 名称
我想检查我的字符串是否是有效的 Windows 文件路径。我四处寻找,似乎没有可靠的方法可以做到这一点。我还检查了 boost 文件系统库,并且不存在明显的函数来执行此检查,也许类似于 is_valid_windows_name
I wanna check if my string is valid windows file path. I was searching around and it seems that there is no reliable method to do that. Also I checked boost filesystem library , and no obvious function exist to do this check , maybe something like is_valid_windows_name
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用 _splitpath() 函数并解析输出(基于它,您可以轻松判断您的路径是否有效)。
有关其他信息,请参阅 MSDN。
请注意,此函数是特定于 Windows 的。
You could use
_splitpath()
function and parse the output (based on it, you could easily say if your path is valid or not).See MSDN for additional information.
Note that this function is windows-specific.
我不相信有一个标准的 C++ API 可以做到这一点。
请注意,Windows API 允许比 Windows Shell 更多的文件名(允许用户在 windows 资源管理器中使用的文件名)。
你应该看看 windows shell api。
另一种可能性是使用反复试验,这样您就真正独立于当前的文件系统。
最简单的方法就是禁止
你应该没问题。
I do not believe there is a standard c++ api for that.
Note that the Windows API allows more filenames than the Windows Shell (The filenames the user is allowed to use in windws explorer).
You should have a look at the windows shell api.
Another possibility is to use trial and error, this way you are truly independend of the current filesystem.
The easiest way is to disallow
and you should be fine.
是的,有一个 boost 函数可以满足您的需求。看一下 boost::filesystem::windows_name(...)。您将需要包含 boost/filesystem/path.hpp 以及正确的(特定于版本和体系结构的)libboost_system 和 libboost_filesystem 库的链接,因为 path 不是仅包含头文件的库。
Yes, there is a boost function that does what you want. Take a look at boost::filesystem::windows_name(...). You will need to include boost/filesystem/path.hpp as well as link against the correct (version- and architecture-specific) libboost_system and libboost_filesystem libraries since path is not a header-only lib.
遗憾的是即使是最新的C++17文件系统库也没有验证文件名的功能。
您可以使用 Windows 特定的Shell Lightweight Utility 函数
PathFileExists
或 Windows APIGetFileAttributes
并专门针对ERROR_INVALID_NAME
检查最后一个错误代码。我认为这是一种误用(因为确实应该有一个专门的功能)但达到了目的。
It's a pity even the newest C++17 filesystem library doesn't have a function to verify file names.
You can use the Windows-specific Shell Lightweight Utility function
PathFileExists
or the Windows APIGetFileAttributes
and check the last error code specifically forERROR_INVALID_NAME
.I think it's kind of a misuse (because there really should be a dedicated function for it) but serves the purpose.