using namespace std;
struct WebSites
{
string siteName;
int rank;
string getSiteName() { return siteName; }
int getRank() { return rank; }
WebSites(string const&, int);
WebSites();
};
WebSites::WebSites(string const& siteName, int rank) {
this->siteName = siteName;
this->rank = rank;
}
WebSites::WebSites() {}
ostream& operator << (ostream& stream, WebSites const& data) {
stream << data.rank << " " << data.siteName.size() << " " << data.siteName<< endl;
return stream;
}
istream& operator >> (istream& stream, WebSites data) {
stream >> data.siteName >> data.rank;
return stream;
}
int main() {
WebSites s1("www.google.co.uk", 1);
//write to file
ofstream writer("chou.dat", ios::out | ios::binary); //i'll add ios::app later
if (!writer) {
cout << " error opening file " << endl;
return -1;
}
else {
writer << s1.getSiteName() << " " << s1.getRank() << endl;
}
writer.close();
//read file
fstream writerR("chou.dat", ios::binary | ios::in | ios::ate);
WebSites read;
while (writerR >> read) {
cout << read.siteName << " rank: "<< read.rank << endl;
}
writerR.close();
return 0;
}
このプログラムがファイルを読み込んでコンソールに表示されない理由を教えてもらえますか?私はそれが完全に書いているということです。私はものを変えようとしましたが、何も働かなかったので、私は同様のコードをオンラインでチェックしましたC++ファイルI/O .datファイルを読み取ることができません
' fstreamのwriterR' <:この二番目のパラメータを解決するために参照すべきですか? –
なぜ読み込みストリーム 'writeR'を呼び出すのですか?それを「リーダー」と呼ぶのはなぜですか? – NathanOliver
これが問題であるかどうかはわかりませんが、ios :: ateをopenに渡して、ファイルを最後まで探します。ファイルの最後から何も読み込む必要はありません。また、私は、入力ファイルストリーム(ifstream)を使用する方が良いと仮定し、それぞれのフィールドを別々に書き込む場合、あなたがしようとしているような構造体全体を読み取ることはできません。バイナリモードを指定しても、テキストをダンプするように動作します。私が見ているように、このコードは1つではなく2つの問題を持っています。 –