例如,我在ubuntu中调用我的可执行文件:
./foo temp/game1.txt temp/game2 txt
我正在使用 realpath() 来查找通往游戏 1.txt 的路径。但是,使用它将为您提供完整的路径,包括 game1.txt 名称。例如,它将以
/home/*/下载/temp/game1.txt
我想擦除该字符串上的 game1.txt,以便我可以使用该字符串使用它来输出该文件夹中的其他文件。两个问题。
- realpath() 可以用于这种操作吗?有更好的方法吗?
- 有人可以给我一种快速擦除"game1.txt"的方法,以便字符串以字符串格式(不是字符)保存为"/home/*/Download/temp/"?
谢谢。
真的不了解 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;
}
见 在 Ideone 上。
您可以使用 dirname 函数来实现此目的: http://linux.die.net/man/3/dirname
请注意,dirname 将擦除尾部斜杠(根目录除外);当您附加文件名时,您必须重新附加斜杠。
此外,您实际上不需要为此目的使用 realpath,您可以简单地使用传入的参数,dirname 会给你"temp",你可以将文件名附加到其中。
man -S3 dirname
应该做你想做的事
跨平台解决方案是
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的文档很容易导航。
http://doc.qt.nokia.com/4.6/qfileinfo.html#absolutePath