問題タブ [seekg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
531 参照

c++ - seek() が期待どおりに機能しない

ファイルから小さなフレーズをコピーするための小さなプログラムがありますが、seekg()がどのように機能するかについて誤解されているか、コードに問題があり、関数が期待どおりに機能しないようです。

テキスト ファイルには次のものが含まれます。

//イントロ

以前に注意した=false

このコードは、「false」という単語を文字列にコピーすることを目的としています

しかし、何らかの理由で、プログラムは次のように出力します。

=偽

私が期待したこと:

ファイルの 24 番目のインデックスに get ポインターを配置したと思いますが、これは "false" という語句が始まる場所です。次に、プログラムはそのインデックスからスペース文字に到達するまで、またはファイルの終わりに到達するまで入力します。

実際に起こったこと:

なんらかの理由で、get ポインターが予想よりも早くインデックスを開始しました。そして、その理由はわかりません。何が間違っているのか、何が間違っているのかについての説明をいただければ幸いです。

また、私は、私が望むところから始めて、単にpreviousNotedStrをstatsStrの部分文字列にすることができることを理解しており、すでにそれを試して成功しています。私は本当にここで実験しているだけです。

0 投票する
1 に答える
111 参照

c++ - 構造体にバイナリ ファイルを設定する

バイナリ ファイル ("example.dat") を逆方向に読み取ろうとして、レコードの構造体にその内容を入力しようとしています。ファイルには 10 個のレコードが含まれており、各レコードには 3 つのデータ型があります。

/* ヘルプとフィードバックをお待ちしております。*/

0 投票する
1 に答える
751 参照

c++ - seek、大きなファイルで失敗する

非常に大きな (950GB) バイナリ ファイルがあり、10 億の浮動小数点シーケンスを格納しています。

長さ 3 のシーケンスで私が持っているファイルの種類の小さな例は次のようになります。

ここで、特定のシーケンス (インデックス = 2 のシーケンス、したがってファイル内の 3 番目のシーケンスとしましょう) を読み取りたいので、次のコードを使用します。

問題は、seekg を使用すると、一部のインデックスでこの読み取りが失敗し、間違った結果が得られることです。ファイルをシーケンシャルに (seekg を使用せずに) 読み取り、代わりに目的のシーケンスを出力すると、常に正しい結果が得られます。

最初は、seekg のオーバーフローについて考えました (バイト数が非常に大きくなる可能性があるため) が、seekg が巨大な (数十億) ストリームオフ タイプの入力を受け取ることがわかりました。

0 投票する
1 に答える
2372 参照

c++ - バイナリファイルを扱うときの Seekg() と seekp() を理解する

私はコンピュータ サイエンスの学生で、コードを理解しようとしていますが、理解できません。このコードにより、ユーザーはバイナリ ファイル内の特定のレコード (構造) を変更できます。わかりませんrecords.seekg(recNum * sizeof(person), ios::beg); and records.seekp(recNum * sizeof(person), ios::beg);。rec num が構造体のサイズのポインターを使用しているのはなぜですか。どんな助けでも大歓迎です。

0 投票する
1 に答える
28416 参照

c++ - C++ で ifstream がファイルの終わりかどうかを確認する方法

1 つの大きなファイル (約 10 GB) のすべてのブロックを順番に読み取る必要があります。ファイルには、次のようにいくつかの文字列を含む多くのフロートが含まれています (各項目は '\n' で分割されています): 6.292611 -1.078219E-266 -2.305673E+065 sod;eiwo 4.899747e-237 1.673940e+089 -4.515213

MAX_NUM_PER_FILE毎回アイテムを読み込んで処理し、別のファイルに書き込んでいますが、いつifstream終了するかわかりません。これが私のコードです:

コードがうまくlengthいかず、実際のファイル サイズよりも大きくなっています。file_input.good()またはを試してみ!file_input.eof()ましたが、機能しませんでした。getline(file_input,s)良いですが、よりもはるかに遅いです。read必要ですが、ファイルの終わりreadかどうかを確認する方法がわかりません。ifstream

私はVS2010を使用してWINDOWS 7で作業を行っています。

私は検索しましたが、それについての答えはありません.ifstreamを使用してファイルを開き、最後まで読み続ける方法このリンクは私の質問に答えることができません.


アップデート、問題解決

皆さん、こんにちは。私のせいだとわかりました。両方ともwhile(file_input.tellg()<length)うまくwhile(file_input.peek()!=EOF)いきます!while(file_input.peek()!=EOF)がおすすめ。

end-of-file の後に追加で書き込まれる項目はbuffer、最後に書き込まれた残りの項目です。

正しいコードは次のとおりです。

0 投票する
1 に答える
552 参照

c++ - バイナリファイル内の位置のバイトの読み取りと出力 (C++)

バイナリ (.bin) ファイルから 256 バイトのセットを読み取り、それをバッファーに格納したいと考えています。次に、これらの各バイトを char ベクトルのベクトルに移動したいと思います。また、ベクター内の char 値を読み取り、そのバイトのバイナリ値の対応する整数値を取得したいと思います。これは私がそれにアプローチした方法です:

しかし、値を出力すると、次のような結果が得られます。

これは明らかに間違った出力です。誰かが私が間違っていたことと、これをどのように達成できるかを説明してもらえますか?

0 投票する
0 に答える
229 参照

c++ - seekg() 関数が次の >> 操作でエラーを引き起こす

こんにちは親愛なる親切な人々

クラスのseekg()関数を使用して問題が発生しました。ifstream私の目標は、既知のレイアウトでテキスト ファイルから整数を読み取ることです。以下は、Ph_Sn.cfg という名前のファイルの例です。

実際のプログラムでは、ファイルを開いて複数のタスクを実行しているため、読み取り位置を少し移動する必要があります。私は自分の問題を追跡し、以下のコードである最小限の実例を作成しました。
要するに、関数を呼び出してストリームカーソルを移動するseekg()と、ストリームオブジェクトが何らかの形で破損し、次の >> 演算子にフェイルビットが設定されます。

コードをコンパイルし、Ph_Sn.cfg があるディレクトリで .exe ファイルを実行すると、コンソールに次の出力が表示されます。

コードのコメントで述べたように、操作をコメントアウトするだけ file.seekg(correctPosition);で、2 回目の読み取りで正しい整数が得られます。

同様の問題に対する回答を見つけようとしましたが、ほとんどの場合、eof フラグが設定され、 を呼び出すことで問題が解決されましたfile.clear()。残念ながら、これは私の場合には役に立たないようです。私もこの投稿を見つけましたが、私の問題は異なると思います (私はひどく間違っていますか?):

  1. Failbit はseekg()>> 演算子の直後ではなく直後に設定されます
  2. 私のファイルはかなり小さいです(数kb)
  3. ファイルをテキストモードで開いています

問題はコード内にあるのではなく、Eclipse のセットアップにあるのではないかと思います。コードが機能するかどうか、独立してコンパイルされているかどうか、そしてもしそうなら、どのような設定がこの(私の目には)奇妙な動作の原因である可能性があるかを確認したいと思います。私は 32 ビットの Windows OS、cdt アドオンと MinGW GCC ツールチェーンを備えた eclipse-Luna を実行しています。

あらゆる種類のヘルプやヒントに感謝します。この問題は、今までに丸 1 週間占有されています。