Как получить каталог файла, который вызывается из аргумента командной строки? - PullRequest
0 голосов
/ 05 апреля 2011

Например, я вызываю свой исполняемый файл в Ubuntu:

. / Foo temp / game1.txt temp / game2 txt

Я использую realpath (), чтобы найти путь к game1.txt. Однако его использование даст мне полный путь, включая имя game1.txt. Например, это будет выглядеть как

/ дома / * / Скачать / TEMP / game1.txt

Я хочу стереть game1.txt в этой строке, чтобы я мог использовать эту строку, чтобы использовать ее для вывода других файлов в этой папке. Два вопроса.

  1. Можно ли использовать realpath () для операций такого типа? Есть ли лучший способ?
  2. Может кто-нибудь дать мне быстрый способ стереть "game1.txt", чтобы строка была "/ home / * / Скачать / temp /" в формате строки (не char)?

Большое спасибо.

Ответы [ 4 ]

3 голосов
/ 05 апреля 2011

Не знаю 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 .

2 голосов
/ 05 апреля 2011

Вы можете использовать функцию dirname для этого: http://linux.die.net/man/3/dirname

Обратите внимание, что dirname сотрет косую черту (кроме корневого каталога); вам придется добавить косую черту обратно при добавлении имени файла.

Кроме того, вам на самом деле не нужно использовать realpath для этой цели, вы можете просто использовать переданный аргумент, dirname даст вам «temp» и вы можете добавить к нему имена файлов.

0 голосов
/ 05 апреля 2011

Кроссплатформенное решение -

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

0 голосов
/ 05 апреля 2011
 man -S3 dirname

должен делать то, что вы хотите

...