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

微笑、不失礼 提交于 2019-12-13 03:32:20

问题


For example, I am calling my executable in ubuntu:

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

I am using realpath() to find the path to the game1.txt. Using it however will give me the full path including the game1.txt name. For example, it will come out as

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

I want to erase game1.txt on that string so that I can use the string to use it to output other files in that folder. Two questions.

  1. Is realpath() alright to use for this kind of operation? Is there better way?
  2. Can someone give me a quick way to erase "game1.txt" so that the string will be "/home/*/Download/temp/" save in a string format(not char)?

Thank you very much.


回答1:


Don't really know Linux, but a general way for your second question:

#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.




回答2:


You can use the dirname function for this: http://linux.die.net/man/3/dirname

Note that dirname will erase the trailing slash (except for the root directory); you'll have to append the slash back in when you append the filename.

Also, you don't actually need to use realpath for this purpose, you could simply use the argument as passed in, dirname will give you "temp" and you can append filenames to that.




回答3:


 man -S3 dirname

should do what you want




回答4:


The cross-platform solution is

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 can also do this easily. I just find the documentation of QFileInfo easily to navigate.

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



来源:https://stackoverflow.com/questions/5544790/how-to-get-directory-of-a-file-which-is-called-from-command-line-argument

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!