2012-02-24 3 views
0

私はCでファイルストリームを持っており、ファイルを繰り返し処理することなく、その中にいくつの行があるか知りたいと思っています。各行は同じ長さです。私はどうすればこれについて行くことができますか?cファイルストリーム内の行数

答えて

3

  • fgetsを行うと、1行が
  • fseekを使用してファイルのサイズを見つけて、ftell

    fseek(fp, 0, SEEK_END); 
    size = ftell(fp); 
    
  • 除算でどのくらい見つけます線のサイズで

off_tで動作するfseekoftelloを使用することもできます。

0

get the total sizeにファイルstat()を1行読み、最初の行の長さで合計サイズを分割します。

stat()を使用する代わりに、ファイルの末尾にfseek()を付けて、ftell()を使用してサイズを取得することもできます。

このようなものについてはどのように
+0

実際には 'stat'(または実際には' fstat')も使用しますが、移植性がありません。 –

0

ftell()とし、行の長さで除算します。

2

すべての行の長さが同じであると考えることが安全であれば、最初の行を読み、長さを取得してからファイルサイズを取得し、行の長さでファイルサイズを分割するだけです。

固定幅エンコーディング(ASCII-7、さまざまな8ビットANSIエンコーディング、UTF-32)でのみ機能します。可変長エンコーディング(UTF-8など)の場合、文字列の長さがバイト数に必ずしも比例しないため、ファイル全体をスキャンする必要があります。

関連する問題