如何获取从命令行参数调用的文件的目录

How to get directory of a file which is called from command line argument?

本文关键字:调用 参数 文件 命令行 何获取 获取      更新时间:2023-10-16

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

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

我正在使用 realpath() 来查找通往游戏 1.txt 的路径。但是,使用它将为您提供完整的路径,包括 game1.txt 名称。例如,它将以

/

home/*/下载/temp/game1.txt

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

  1. realpath() 可以用于这种操作吗?有更好的方法吗?
  2. 有人可以给我一种快速擦除"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