从文件名获取目录名
我有一个文件名 (C:\folder\foo.txt
),我需要在 C++ 中检索文件夹名称 (C:\folder
)。在 C# 中,我会做这样的事情:
string folder = new FileInfo("C:\folder\foo.txt").DirectoryName;
是否有一个函数可以在 C++ 中使用从文件名中提取路径?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
使用 Boost.Filesystem:
Using Boost.Filesystem:
示例来自 http://www.cplusplus.com/reference/string/string/find_last_of/
Example from http://www.cplusplus.com/reference/string/string/find_last_of/
在 C++17 中存在一个类
std::filesystem::path
使用方法
parent_path
。可能的输出:
In C++17 there exists a class
std::filesystem::path
using the methodparent_path
.Possible output:
为此有一个标准的 Windows 函数,PathRemoveFileSpec。如果您仅支持 Windows 8 及更高版本,强烈建议使用 PathCchRemoveFileSpec 相反。除其他改进外,它不再限于
MAX_PATH
(260) 个字符。There is a standard Windows function for this, PathRemoveFileSpec. If you only support Windows 8 and later, it is highly recommended to use PathCchRemoveFileSpec instead. Among other improvements, it is no longer limited to
MAX_PATH
(260) characters.为什么一定要这么复杂?
Why does it have to be so complicated?
您可能需要
p.parent_path().filename()
来获取父文件夹的名称。You may need
p.parent_path().filename()
to get name of parent folder.使用 boost::文件系统。无论如何,它都会被纳入下一个标准,所以您最好习惯它。
Use boost::filesystem. It will be incorporated into the next standard anyway so you may as well get used to it.
我很惊讶没有人提到 Posix 中的标准方式
请使用
basename / dirname
构造。男子基本名
I'm so surprised no one has mentioned the standard way in Posix
Please use
basename / dirname
constructs.man basename
_splitpath 是一个很好的 CRT 解决方案。
_splitpath is a nice CRT solution.
标准 C++ 在这方面不会为您做太多事情,因为路径名是特定于平台的。您可以手动解析字符串(如glowcoder的答案),使用操作系统工具(例如 http://msdn.microsoft.com/en-us/library/aa364232(v=VS.85).aspx ),或者可能是最好的方法,您可以使用第三方文件系统库,如 boost::filesystem。
Standard C++ won't do much for you in this regard, since path names are platform-specific. You can manually parse the string (as in glowcoder's answer), use operating system facilities (e.g. http://msdn.microsoft.com/en-us/library/aa364232(v=VS.85).aspx ), or probably the best approach, you can use a third-party filesystem library like boost::filesystem.
只需使用这个:ExtractFilePath(your_path_file_name)
Just use this: ExtractFilePath(your_path_file_name)