0

たとえば、ubuntuで実行可能ファイルを呼び出しています。

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

game1.txtへのパスを見つけるためにrealpath()を使用しています。ただし、これを使用すると、game1.txt名を含むフルパスが得られます。たとえば、次のようになります

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

その文字列のgame1.txtを消去して、その文字列を使用してそのフォルダ内の他のファイルを出力できるようにします。2つの質問。

  1. realpath()はこの種の操作に使用しても大丈夫ですか?より良い方法はありますか?
  2. 誰かが「game1.txt」を消去して文字列が「/home/ * / Download / temp /」になるように文字列形式(charではない)で保存する簡単な方法を教えてもらえますか?

どうもありがとうございます。

4

4 に答える 4

3

Linuxについてはよくわかりませんが、2番目の質問の一般的な方法は次のとおりです。

#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#絶対パス

于 2011-04-04T22:10:35.440 に答える