我需要从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。
7条答案
按热度按时间hec6srdp1#
如果你使用std::string而不是C风格的char数组,你可以按以下方式使用string::find_last_of和string::substr:
字符串
ct2axkht2#
现在,在C++17中可以使用
std::filesystem::path::parent_path
:字符串
fcy6dtqo3#
重任务和跨平台的方式是使用boost::filesystem::parent_path()。但显然这会增加您可能不希望的开销。
或者,你可以使用cstring的**strrchr**函数,如下所示:
字符串
kknvjkwl4#
编辑const字符串是未定义的行为,因此声明如下:
字符串
您可以使用下面的1行来获得您想要的结果:
型
v8wbuo2f5#
在POSIX兼容的系统(*nix)上,有一个通用的函数可以用于这个
dirname(3)
。在Windows上有_splitpath
。_splitpath函数将路径分为四个部分。
字符串
所以结果(我想这就是你要找的)应该是
dir
。下面是一个示例:
型
whhtz7ly6#
在Windows平台上,您可以使用PathRemoveFileSpec或PathCchRemoveFileSpec来实现这一点。然而,为了便于移植,我会使用这里建议的其他方法。
anhgbhbe7#
您可以使用dirname来获取父目录查看link以获取更多信息
拉古