問題タブ [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.
c - FILE* ポインターの終わりが、書き込まれたデータのサイズと等しくありません
非常に簡単に言えば、次のコード スニペットがあります。
そしてそれは出力します:
何故ですか?書き込まれたバイト数がファイル ポインタと一致しないのはなぜですか?
c - なぜfwriteは私が言う以上に書くのですか?
出力:
何が起こっている?writeは25755に設定されており、fwriteに、最初にあるファイルにその数のバイトを書き込み、次に25755以外の位置にimを書き込むように指示します。
c - ftell( stdin ) が不正なシーク エラーを引き起こす理由
次のコードは、「不正なシーク」を出力します。
これは、実行cat script | ./a.out
したときだけでなく、実行したときにも発生します./a.out
。もちろん、問題は ftell にあります。私の質問は:なぜこれが起こるのですか?stdinはシーク可能だと思います。fseek でも同じエラーが発生します。stdin がシーク可能でない場合、同じようなことを行う方法はありますか?
返信ありがとうございます。
c - fread への最初の呼び出し後の ftell エラー
したがって、ファイルの最初の 3 バイトを読み取る非常に単純なプログラムがあります。
テキストファイルで試してみると、うまくいきます:
しかし、たとえばPNGで実行すると、次のようになります。
ファイルの最初の 3 バイトは確かに 89 50 4E ですが、147 がどこから来たのかわかりません。bmp ファイルを使用すると、次のようになります。
これらの最初の位置がどこから来たか知っていますか? 助けてくれてどうもありがとう
linux - ファイル記述子を調べますか?
ファイル*の代わりに生のファイル記述子でftell()が行うこと(ファイル内の現在の位置を返す)を行う方法はありますか?lseek()を使用して生のファイル記述子を探すことができるので、あるべきだと思います。
fdopen()を使用して、ファイル記述子に対応するFILE *を作成できることはわかっていますが、そうはしません。
linux - lseek64を_実際に_64ビットオフセットを返すようにするにはどうすればよいですか?
次にstrace:
- 20974464000==0x4E22CEC00-良い
- -500372480==0xffffffffe22cec00-悪い
(off64_t)lseek64(fd, 0, SEEK_END);
_llseekを誤って呼び出すように変更されます。
主要なdwordを切り落とすことなく、サイズが正しくなるようにするには、さらに何をすればよいですか?
c++ - fseek/ftell で間違ったファイル サイズが表示される場合はありますか?
C または C++ では、以下を使用してファイル サイズを返すことができます。
パディングまたは状況固有のその他の情報に基づいて、このコードから間違ったファイル サイズを返す可能性のある開発環境、コンパイラ、または OS はありますか? 1999 年頃に C または C++ の仕様に変更があり、このコードが特定のケースで機能しなくなった可能性はありますか?
この質問については、 flags を使用してコンパイルすることで大きなファイルのサポートを追加していると仮定してください-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1
。ありがとう。
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 であるため、ポインターに対して演算を実行できるはずです。
それとも、ここで間違った軌道に乗っていますか? 他のアプローチを検討する必要がありますか?
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
しかし、従業員情報を編集するたびにファイルを更新する必要があり、行を検索して書き直そうとしています。
同じ問題を抱えている人の次の質問を見たことがありますが、ファイルに書き込もうとすると、常にファイルの最後に書き込まれます
これが私のコードです:
c - ftello/fseeko 対 fgetpos/fsetpos
ftello
/fseeko
とfgetpos
/はどう違いfsetpos
ますか? どちらも、不透明なオフセットタイプを使用して64ビットオフセットを許可するファイルポインターの取得/設定関数のようです。
それらは異なるプラットフォームまたは異なる標準でサポートされていますか? 使用するオフセットのタイプがより柔軟ですか?
ところで、 fgetpos/fsetpos と ftell/fseek の違いについては知っていますが、これは重複ではありません。その質問は ftell/fseek に関するもので、答えはftello/fseeko には当てはまりません。