从 C++ 中的文件获取父目录
我需要从 C++ 中的文件获取父目录:
例如:
输入:
D:\Devs\Test\sprite.png
输出:
D:\Devs\Test\ [or D:\Devs\Test]
我可以使用函数来执行此操作:
char *str = "D:\\Devs\\Test\\sprite.png";
for(int i = strlen(str) - 1; i>0; --i)
{
if( str[i] == '\\' )
{
str[i] = '\0';
break;
}
}
但是,我只想知道是否存在内置函数。 我用的是VC++2003。
I need to get parent directory from file in C++:
For example:
Input:
D:\Devs\Test\sprite.png
Output:
D:\Devs\Test\ [or D:\Devs\Test]
I can do this with a function:
char *str = "D:\\Devs\\Test\\sprite.png";
for(int i = strlen(str) - 1; i>0; --i)
{
if( str[i] == '\\' )
{
str[i] = '\0';
break;
}
}
But, I just want to know there is exist a built-in function.
I use VC++ 2003.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
如果您使用 std::string 而不是 C 风格的字符数组,则可以使用 string::find_last_of 和 string::substr 在以下方式:
If you're using std::string instead of a C-style char array, you can use string::find_last_of and string::substr in the following manner:
现在,在 C++17 中可以使用
std::filesystem: :path::parent_path
:Now, with C++17 is possible to use
std::filesystem::path::parent_path
:重型和跨平台方法是使用 boost::filesystem::parent_path()。但显然这会增加您可能不希望的开销。
或者,您可以使用 cstring 的 strrchr 函数像这样的东西:
Heavy duty and cross platform way would be to use boost::filesystem::parent_path(). But obviously this adds overhead you may not desire.
Alternatively you could make use of cstring's strrchr function something like this:
编辑 const 字符串是未定义的行为,因此声明如下所示:
您可以使用下面的 1 个衬垫来获得所需的结果:
Editing a const string is undefined behavior, so declare something like below:
You can use below 1 liner to get your desired result:
在 POSIX 兼容系统 (*nix) 上,此
dirname(3)
有一个常用函数。在 Windows 上,有_splitpath
。所以结果(这就是我认为你正在寻找的)将在
dir
中。这是一个例子:
On POSIX-compliant systems (*nix) there is a commonly available function for this
dirname(3)
. On windows there is_splitpath
.So the result (it's what I think you are looking for) would be in
dir
.Here's an example:
在 Windows 平台上,您可以使用
PathRemoveFileSpec 或 < a href="https://msdn.microsoft.com/en-us/library/windows/desktop/hh707092(v=vs.85).aspx" rel="nofollow noreferrer">PathCchRemoveFileSpec
为了实现这一点。
然而,为了可移植性,我会采用此处建议的其他方法。
On Windows platforms, you can use
PathRemoveFileSpec or PathCchRemoveFileSpec
to achieve this.
However for portability I'd go with the other approaches that are suggested here.
您可以使用 dirname 来获取父目录
检查此链接了解更多信息
Raghu
You can use dirname to get the parent directory
Check this link for more info
Raghu