問題タブ [ftell]

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 投票する
4 に答える
3622 参照

c - FILE* ポインターの終わりが、書き込まれたデータのサイズと等しくありません

非常に簡単に言えば、次のコード スニペットがあります。

そしてそれは出力します:

何故ですか?書き込まれたバイト数がファイル ポインタと一致しないのはなぜですか?

0 投票する
4 に答える
11859 参照

c - なぜfwriteは私が言う以上に書くのですか?

出力:

何が起こっている?writeは25755に設定されており、fwriteに、最初にあるファイルにその数のバイトを書き込み、次に25755以外の位置にimを書き込むように指示します。

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

c - ftell( stdin ) が不正なシーク エラーを引き起こす理由

次のコードは、「不正なシーク」を出力します。

これは、実行cat script | ./a.outしたときだけでなく、実行したときにも発生します./a.out。もちろん、問題は ftell にあります。私の質問は:なぜこれが起こるのですか?stdinはシーク可能だと思います。fseek でも同じエラーが発生します。stdin がシーク可能でない場合、同じようなことを行う方法はありますか?

返信ありがとうございます。

0 投票する
3 に答える
973 参照

c - fread への最初の呼び出し後の ftell エラー

したがって、ファイルの最初の 3 バイトを読み取る非常に単純なプログラムがあります。

テキストファイルで試してみると、うまくいきます:

しかし、たとえばPNGで実行すると、次のようになります。

ファイルの最初の 3 バイトは確かに 89 50 4E ですが、147 がどこから来たのかわかりません。bmp ファイルを使用すると、次のようになります。

これらの最初の位置がどこから来たか知っていますか? 助けてくれてどうもありがとう

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

linux - ファイル記述子を調べますか?

ファイル*の代わりに生のファイル記述子でftell()が行うこと(ファイル内の現在の位置を返す)を行う方法はありますか?lseek()を使用して生のファイル記述子を探すことができるので、あるべきだと思います。

fdopen()を使用して、ファイル記述子に対応するFILE *を作成できることはわかっていますが、そうはしません。

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

linux - lseek64を_実際に_64ビットオフセットを返すようにするにはどうすればよいですか?

次にstrace:

  • 20974464000==0x4E22CEC00-良い
  • -500372480==0xffffffffe22cec00-悪い

(off64_t)lseek64(fd, 0, SEEK_END);_llseekを誤って呼び出すように変更されます。

主要なdwordを切り落とすことなく、サイズが正しくなるようにするには、さらに何をすればよいですか?

0 投票する
4 に答える
5452 参照

c++ - fseek/ftell で間違ったファイル サイズが表示される場合はありますか?

C または C++ では、以下を使用してファイル サイズを返すことができます。

パディングまたは状況固有のその他の情報に基づいて、このコードから間違ったファイル サイズを返す可能性のある開発環境、コンパイラ、または OS はありますか? 1999 年頃に C または C++ の仕様に変更があり、このコードが特定のケースで機能しなくなった可能性はありますか?

この質問については、 flags を使用してコンパイルすることで大きなファイルのサポートを追加していると仮定してください-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1。ありがとう。

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

winapi - 大きなファイルへの高速アクセス - fseek ftell fsetpos fgetpos

私は、ギガバイトのファイル内の選択されたデータへのある種の迅速なアクセスを提供することに直面しています。開始点を見つけると、その後のアクセスはシーケンシャルになります。ファイルには、各レコードの先頭に日付が含まれており、日付はファイル全体で増加します。最初から読み始めて、先頭の内容を無視してファイルを読みたくないのです。私は WINDOWS アプリケーションにのみ興味があります。ファイルをテキストモードで開きたいです。

64 ビットの fseek/ftell または fsetpos/fgetpos 関数を使用して、ある種のバイナリ検索を実行できることを思いつきました。改行で区切られたレコードの途中までシークする可能性があることは理解していますが、fgets 呼び出しを使用して部分的なレコードを単純にスキップできると考える人もいるでしょう。

fseek は元の SEEK_END メカニズムを提供するため、ファイル サイズを決定するために ftell を使用できるようです。fsetpos/fgetpos に同様の機能はありません。fsetpos/fgetpos を使用した場合、ファイル サイズを取得するにはどうすればよいでしょうか。

_fseeki64/_ftelli64 は int64 を使用し、fsetpos/fgetpos で使用される fpos_t も int64 であるため、ポインターに対して演算を実行できるはずです。

それとも、ここで間違った軌道に乗っていますか? 他のアプローチを検討する必要がありますか?

0 投票する
3 に答える
6701 参照

c - cの特定の行に上書きする

プログラムで生成する約2000行のテキストのファイルがあり、すべての行に従業員の情報があり、次のように出力されます

1 1 ISAAC FONSECA 58 C 1600 1310.40 6 1 0.22 2164.80 1
2 1 Manuel Gutierrez 22 D 1700 1523.37 4 1 0.13 897.26 1
3 1 Daniel Bernal 34 C 1600 1195.84 2 1 0.26 836.16
1 0.00 1

しかし、従業員情報を編集するたびにファイルを更新する必要があり、行を検索して書き直そうとしています。

同じ問題を抱えている人の次の質問を見たことがありますが、ファイルに書き込もうとすると、常にファイルの最後に書き込まれます

テキスト ファイルの特定の行を上書きしますか?

これが私のコードです:

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

c - ftello/fseeko 対 fgetpos/fsetpos

ftello/fseekofgetpos/はどう違いfsetposますか? どちらも、不透明なオフセットタイプを使用して64ビットオフセットを許可するファイルポインターの取得/設定関数のようです。

それらは異なるプラットフォームまたは異なる標準でサポートされていますか? 使用するオフセットのタイプがより柔軟ですか?

ところで、 fgetpos/fsetpos と ftell/fseek の違いについては知っていますが、これは重複ではありません。その質問は ftell/fseek に関するもので、答えはftello/fseeko には当てはまりません。