0

例如,我在 ubuntu 中调用我的可执行文件:

./foo temp/game1.txt temp/game2 txt

我正在使用 realpath() 来查找 game1.txt 的路径。但是,使用它会给我完整的路径,包括 game1.txt 名称。例如,它将作为

/home/ * /Download/temp/game1.txt

我想删除该字符串上的 game1.txt,以便我可以使用该字符串来输出该文件夹中的其他文件。两个问题。

  1. realpath() 可以用于这种操作吗?有没有更好的办法?
  2. 有人可以给我一个快速删除“game1.txt”的方法,以便字符串将“/home/ * /Download/temp/”保存为字符串格式(不是字符)吗?

非常感谢你。

4

4 回答 4

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;
}

参见 Ideone

于 2011-04-04T22:00:16.673 回答
2

您可以为此使用 dirname 函数:http: //linux.die.net/man/3/dirname

注意 dirname 将擦除尾部斜杠(根目录除外);附加文件名时,您必须将斜杠重新附加。

此外,您实际上不需要为此使用 realpath,您可以简单地使用传入的参数,dirname 会给您“temp”,您可以将文件名附加到该参数。

于 2011-04-04T21:59:44.473 回答
0
 man -S3 dirname

应该做你想做的

于 2011-04-04T21:57:12.790 回答
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 的文档来导航。

http://doc.qt.nokia.com/4.6/qfileinfo.html#absolutePath

于 2011-04-04T22:10:35.440 回答