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

发布于 2024-09-06 21:51:49 字数 121 浏览 3 评论 0原文

我想检查我的字符串是否是有效的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

赠佳期 2024-09-13 21:51:49

您可以使用 _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.

影子是时光的心 2024-09-13 21:51:49

我不相信有一个标准的 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.

森林散布 2024-09-13 21:51:49

是的,有一个 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.

浅黛梨妆こ 2024-09-13 21:51:49

遗憾的是即使是最新的C++17文件系统库也没有验证文件名的功能。

您可以使用 Windows 特定的Shell Lightweight Utility 函数 PathFileExistsWindows API GetFileAttributes 并专门针对 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 API GetFileAttributes and check the last error code specifically for ERROR_INVALID_NAME.

I think it's kind of a misuse (because there really should be a dedicated function for it) but serves the purpose.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文