を示し、あなたはファイルの末尾にあります。
あなたがtellgを使用してこれを理解、または「取得伝える」ことができます。
std::cout << "Position in file is: " << fs.tellg() << std::endl;
これは、バイトはファイルの先頭から、あなたがファイル内にあるオフセットを教えてくれます。ファイルからバイトを読み取るには、まずファイル内の適切な位置を探さなければなりません。これを行うには、seekg、または "seek get"を使用できます。
fs.seekg(0);
これは、ファイル(ファイルの先頭からのオフセット0バイト)の始まりを求めて、あなたは正しくファイルから読み取ることができるはずです。入力用
tellg
とtellp
がそうであるように、あなたたとえば、seekg
とseekp
は、同一でなければならないが、あなたは理想的な(「取得」のために)「G」で終わるメンバ関数を使用する必要がありますストリーム、およびで終わる機能」出力ストリームのための "p"( "put"の場合)。良い点は、@Borgleaderのコメントで育った
EDIT
読み取りが失敗した場合には、より複雑な例については、あなたが知らないかもしれません。そのためには、フェイルビットチェックすることができますiostateフラグを分析するには
if (fs.fail()) {
// you can check more specific error codes with std::ios_base::iostate
// fs.fail() will evaluate to 0 if no error, or false, otherwise it has an error
std::cout << "Failed to read from file" << std::endl;
}
UPDATE
を、あなたはfstreamのメンバー関数good
、eof
、fail
、bad
を使用することができます。オリジナル例えばfstreamののiostateをチェックする簡単な例は次のとおりです。
は
End of file
Failed to read, failbit
全体的に、多くの場合、読み取りに失敗した場合はチェックをしない限り、十分である:実行は次の出力を生成
#include <fstream>
#include <iostream>
int main()
{
int i = 20;
std::fstream fs("someFile.dat", std::ios::out | std::ios::binary | std::ios::in);
fs.write(reinterpret_cast<const char*>(&i), sizeof(int));
i = 0;
fs.read(reinterpret_cast<char*>(&i), sizeof(int));
// you can check other settings via the ios::fail() member function
if (fs.good()) { // checks goodbit
std::cout << "File is normal, no errors\n";
}
if (fs.eof()) { // checks end of file
std::cout << "End of file\n";
}
if (fs.fail()) { // checks failbit or badbit
std::cout << "Failed to read, failbit\n";
}
if (fs.bad()) { // checks the badbit
std::cout << "Failed to read, badbit\n";
}
}
これ、ロジックをさらに洗練する必要があります。
ステップ1:読み取り/書き込み操作が成功したかどうかを確認します。私は推測し、読み込みに失敗したと言います(Alexanderの答えを参照) – Borgleader
あなたは何を求めていますか? –