6

LinuxのC ++コードで「〜」で始まるパスを使用する可能性はありますか? たとえば、次のコードは正しく機能していません。

#include <iostream>
#include <fstream>
using namespace std;

int main () 
{
  ofstream myfile;
  myfile.open ("~/example.txt");
  myfile << "Text in file .\n";
  myfile.close();
  return 0;
}
4

1 に答える 1

7

Linux または POSIX システムを使用していて、インタラクティブなシェルを理解していると思います~(例: bash)

実際には、 で始まるファイル パスは~ほとんど発生しません (mkdir '~'シェルでそのようなディレクトリを作成することはできますが、それはひねくれた行為です)。シェルは引数をグロブしているため、端末でコマンドとして入力すると、シェル(プログラムではありません!)が置き換え~られることに注意してください。glob(7)を参照してください。おそらく、C++ プログラム内でglob(3)またはwordexp(3)を使用する必要があります (ただし、文字列が何らかのデータ (構成ファイル、ユーザー入力など) に由来する場合にのみそうする必要があります...)/home/martinmyprogram ~/example.txt"~/example.txt"

場合によっては、単純にgetenv(3)を使用してホーム ディレクトリを取得することもできます (またはgetpwuid(3)getuid(2)を使用)。おそらくあなたはするかもしれません

std::string home=getenv("HOME");
std::string path= home+"/example.txt";
ofstream myfile(path);

本気なら、 が返らgetenv("HOME")ないことを確認する必要がありますNULL。実際には、それが起こる可能性は低いです。

これも参照してください。

于 2015-11-05T12:09:49.303 に答える