开发者

Check file name is valid windows name

开发者 https://www.devze.com 2023-01-04 09:23 出处:网络
I wanna check if my string is valid windows file path. I was searching around an开发者_运维问答d it seems that there is no reliable method to do that. Also I checked boost filesystem library , and no

I wanna check if my string is valid windows file path. I was searching around an开发者_运维问答d 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


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.


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.


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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消