1

これは、メソッドを実装する前にメソッドをテストするために使用するメイン ファイルです。ディレクトリ内のすべてのファイルのリストを取得し、それらをtxtファイルに書き込んで(ここまでは正常に動作します)、そのテキストファイルからファイル名を読み取ろうとしています。

using namespace std;

string sysCall = "", location = "~/Documents/filenames.txt";
string temp = "";
sysCall = "ls / > "+location;
system(sysCall.c_str());

ifstream allfiles(location.c_str());
allfiles.good();
getline(allfiles, temp);
cout<<temp<<endl;  //At this point, the value of temp is equal to ""

return -1;

プログラムの実行後、テキストは出力されていません。私が他の人の質問で読んだことから、これはうまくいくはずです(しかし、明らかにうまくいきません)。ここで何が間違っていますか?

編集: allfiles.good() は false を返しますが、なぜそれが返されるのかわかりません...

4

3 に答える 3

7

ifstream allfiles("~/Documents/filenames.txt");あなたが思っていることをしません。チルダ~文字はファイル名の一部ではありません。一部のシェルで解釈される特殊文字です。~または$文字を含まないパス全体が必要です。

、または単に に設定locationしてみてください。"/tmp/filenames.txt""filenames.txt"

また、Boost.Filesystemを使用できる場合は、directory_iteratorを呼び出す代わりに を使用できます/bin/ls

于 2011-06-10T19:20:40.130 に答える
4

このsystem()呼び出し~により、ファイル名の がホーム ディレクトリ (例: /home/mrswmmr) に展開されますが、そうでifstreamはありません。~をホーム ディレクトリへのフル パスに置き換えると、機能するはずです。

于 2011-06-10T19:22:10.263 に答える
0

無保証なので動作保証systemはありません。

于 2011-06-10T19:18:54.703 に答える