2011-04-04 35 views
0

例如,我打电话在Ubuntu我的可执行文件:如何获取从命令行参数调用的文件的目录?

./foo温度/ game1.txt温度/ GAME2 TXT

我使用的真实路径()来查找路径game1.txt。 然而,使用它会给我包括game1.txt名称的完整路径。 例如,它会出来为

/家庭/ * /Download/temp/game1.txt

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

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

非常感谢。

回答

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

See on Ideone

0
man -S3 dirname 

应该做你想要

2

您可以使用此目录名称的功能是什么:http://linux.die.net/man/3/dirname

注意,目录名称将删除结尾的斜线(除了根目录);当您附加文件名时,您必须重新添加斜线。

此外,你并不需要为此目的使用realpath,你可以简单地使用参数作为传入,dirname会给你“temp”,你可以追加文件名到那个。

+0

这是正确的解决方案。除非您将调用'chdir'来更改工作目录,否则不需要转换为绝对路径。 – 2011-04-04 22:54:30

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

相关问题