例如,我在ubuntu中调用我的可执行文件:
./ foo temp / game1.txt temp / game2 txt
我使用realpath()来查找game1.txt的路径。 然而,使用它会给我一个完整的路径,包括game1.txt名称。 例如,它将显示为
/家庭/ * /Download/temp/game1.txt
我想删除该字符串上的game1.txt,以便我可以使用该字符串来输出该文件夹中的其他文件。 两个问题。
非常感谢。
答案 0 :(得分:3)
不是真的了解Linux,而是第二个问题的一般方法:
#include <string>
#include <iostream>
int main(){
std::string fullpath("/home/*/Download/temp/game1.txt");
size_t last = fullpath.find_last_of('/');
std::string path = fullpath.substr(0,last+1);
std::cout << path;
}
答案 1 :(得分:2)
您可以使用dirname函数:http://linux.die.net/man/3/dirname
请注意,dirname将删除尾部斜杠(根目录除外);当你附加文件名时,你必须将斜杠附加回来。
此外,您实际上并不需要为此目的使用realpath,您只需使用传入的参数,dirname将为您提供“temp”,您可以将文件名附加到该文件名。
答案 2 :(得分:0)
man -S3 dirname
应该做你想做的事情
答案 3 :(得分:0)
跨平台解决方案
QFileInfo target_file_name(argv[1]);
QString absolute_path = target_file_name.absolutePath()
// e.g. /home/username/
QString some_other_file = QString("%1/another_file.txt").arg(absolute_path)
// => /home/username/another_file.txt
Boost.Filesystem也可以轻松完成。我只是轻松地找到了QFileInfo的文档。