問題タブ [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 投票する
0 に答える
373 参照

c - C.UTF-8 を現在のロケールとして使用すると、fseek/ftell から予期しない結果が生じる

fseek と fgetpos の相互作用をテストしていたところ (より正確には、マルチバイト内にある fpos_t を取得できるかどうか)、かなり予期しない状況に陥りました。

setlocale(LC_CTYPE, "C.UTF-8");andを使用するたびにfputwcfseekもう機能しないようで、ファイル内でカーソルを移動する唯一の方法は を使用することfgetwcです。

コードは次のとおりです (すべての呼び出しは正常に完了します。つまり、setlocale、fseek、fputwc などです。簡潔にするために、戻り値のチェックを取り除きました)。

これは、glibc 2.16 を使用する Ubuntu で発生します。なぜこれが起こるのか、誰かが良い説明を持っていますか? これは glibc のバグですか?

いくつかのメモ:

  • ファイルを閉じて read more で再度開くと、すべてが期待どおりに機能します (位置がマルチバイト内にあるためfseekftell_out/fpos_outが適切1fgetwc失敗した後)errno

  • 私が使用しない場合setlocale、出力はほとんど期待どおりですfgetwcが、もう設定されていませerrnoん。

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

c - この関数で ftell が 0 を返すのはなぜですか?

プログラムを実行し、製品リストを表示することを選択すると、何も出力されません。しばらくすると、 の値fl_sizeが常に 0 であることがわかりました。これはなぜですか?

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

python - Python でファイル記述子の位置を取得する

たとえば、生の数値ファイル記述子があり、それに基づいてファイル内の現在の位置を取得する必要があるとします。

次のコードlibは、ファイル オブジェクトへのアクセスを許可しないコンパイル済みライブラリです。readループでは、処理されたデータを返す埋め込みメソッドを使用します。データとその長さはファイルの位置とは関係がないため、オフセットを数学的に計算することはできません。

fdopenをas として使用しようとしましたが、ループ内で更新されていないファイルの最初の位置のみfd = fdopen(p.get_open_files()[0].fd)が返されました。print fd.tell()

ファイル記述子に基づいて、ファイル内の現在のリアルタイム位置を取得する方法はありますか?

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

c - UTF-8 テキスト ファイルを処理するときに ftell/fgetpos が正しい位置を取得できない

VStudio 2012 + Win7 でテスト

UTF-8 テキスト ファイルには、わずか 5 バイトしか含まれていません。

テキストモードでは、次のように表示されます。

ソースも簡単です:

ただし、プログラムをデバッグするとき、1ftell()番目は 2 ではなく 1 の位置値を返します...したがって、_fgetts()2 番目のテキスト行に対して get が呼び出されると、 character ではなく CR マークが取得されるだけです2

テキストモードでファイルを処理するのに不備があるのではないかと思います(サンプルはモード"r,ccs=UTF-8"でうまく機能します編集:真ではありません!最初の ftell() は0を返します。指摘してくれてありがとうハンス))。UTF-8テキストファイルにANSI以外の文字が含まれている場合に正しく動作するのはさらに奇妙です...しかし、最初に純粋なANSIファイルを解決しましょう。そして、はい、すでにフォーラムを検索しましたが、驚くべきことに同様の質問者は見つかりませんでした)"r"
ftell()

現在の最善の回避策は、"r"モードで文字列行を読み取り、UTF-8 エンコーディングから Unicode エンコーディングに変換することです。より巧妙な提案があれば、本当に感謝します。


----- UPDATE 分割 (2015/03/25) -----

MinGW + Win7 および GCC + CentOS でのテスト

以下の要点について貴重なご意見を頂戴し、

  • コンパイラの実装: Microsoft vs GNU @nm
  • @Hans Passantの不正確な内部バッファ使用ftell()

    • 固定長エンコーディング (例: "r" モード) と可変長エンコーディング (例: "r,css=UTF-8" モード)
    • 1 文字の行末 (単一 LF) と 2 文字の行末 (CR+LF) @Hans Passant、@IInspectable

複合条件下で問題をテストすることにしました。

使用したテキストファイル

使用するソース (GNU コンパイラ用)

結果 #1: "r" モード、GNU+Win7

結果 #2: "r,ccs=UTF-8"モード、GNU+Win7、setlocale() あり/なし

結果 #3: "r,ccs=UTF-8" モード、GNU+ CentOS、WITH setlocale()

結論

  • GNU+CentOS の場合、 が使用されている場合 (およびsetlocale()使用されている場合のみ)、ftell()完全に機能します。これは、単一 LF の改行が Unix の標準であるためだと思います。
  • ただし、Windows の場合、シングル LF または"ccs=UTF-8"モードのいずれかを使用するftell()と、警告なしで不正確な戻り値が返されます...setlocale()ここでは違いはありません。ただし、BOM が添付された UTF-8/UTF-16 ファイルは完全に処理できます...つまりftell()、可変長エンコーディングを処理できる可能性があるということですか??
    最後に、前に述べたように、"r"モード (CR+LF 行末ルールへの準拠) は「世界を救う」でしょう.~

@Hans Passant、@ nm、何か見逃した場合は、結論を親切に修正してください。

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

php - a+ と fopen() を使用したモード

a/a+マニュアルによると、関数内でモードを選択するfopen()とファイルポインタが末尾に配置されるとのこと。

しかし、なぜ を使用して 0 を取得しftell()feof()それでも を返すのfalseでしょうか? ファイルポインタが最後にある場合。

例えば:

1になったのですが、ファイルポインタが最後にあると0になるのではないでしょうか?

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

c - ファイルから読み取り、オフセットを設定しますか?

私は C が初めてで、EOF までファイルをスキャンし、特定のキーワードを含む行を選択し、最後の行が検索された後にオフセットを設定する C プログラムを構築しようとしています。スキャンが再度実行されると、ファイルがスキャンされます。今回は、保存されたオフセットから始まり、EOF まで下方向に続きます。

ファイル I/O のさまざまな機能に頭を悩ませようとしていますが、fopen()、fseek()、fgets()、ftell() などを呼び出す手順をつなぎ合わせて、やりたいことを実行するのに苦労しています。することです。誰かが私を正しい方向に向けたり、これを行うために必要なことを説明したりできますか?

ありがとうございました!

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

android - ftello() および fseeko() Android ビルド エラー

64 ビット アーキテクチャ用の Android L を構築しようとしています。

私のコードは次のようになります:

以下ftellofseekoエラーが発生しています:

fseekoとについて確認ftelloしましたが、マニュアル ページでは_FILE_OFFSET_BITS、値 64で定義するとoff_t64 ビット型になることが記載されています。それでもこのエラーが表示されます。このエラーについて確認しましたが、満足のいく答えが見つかりませんでした。

誰かが私にこれを手伝ってくれると本当に助かります。

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

c++ - fseek、ftell によるセグメンテーション違反

私はFSEEKを使用してファイルの終わりまで、一度に2560 * 5バイトのステップを探しています。セグメンテーションの過失が得られている理由がわかりません。TDA2Xボードでこのコードを実行しています。

uNumFrames の開始値は 1000 です。このコードは基本的に、外部接続された SSD ドライブからデータを読み取ろうとしており、fseek を使用してファイル内の特定のコンテナーをスキップしながら、ファイルをバイト単位で読み取っています。私が直面している問題は、このようなファイルを読み取ろうとしているときに、コードが次の詳細でクラッシュすることです

サンプル出力は次のようになります。