0

巨大なテキストファイル(約100MB以上)を1行ずつ読み取るアプリがあります。

アプリがファイルを読み取るのに非常に時間がかかるため、読み込みが終了するまでの残り時間を示すStatusStripProgressBarを下部に追加します。

ファイルの長さと読み取られている文字列の長さを比較しようとしましたが、同じ結果が得られません。文字列をバイトに変換しようとしましたが、それでも異なります。たとえば、次のようになります。

while (!sr.EndOfStream) 
{
   s = sr.ReadLine;
   TotalStringSize += s.Length;
   UTF8ToASCII += UTF8Encoding.ASCII.GetByteCount(s);
   UTF8ToBigEndianUnicode += UTF8Encoding.BigEndianUnicode.GetByteCount(s);
   UTF8ToDefault += UTF8Encoding.Default.GetByteCount(s);
   UTF8ToUnicode += UTF8Encoding.Unicode.GetByteCount(s);
   UTF8ToUTF32 += UTF8Encoding.UTF32.GetByteCount(s);
   UTF8ToUTF7 += UTF8Encoding.UTF7.GetByteCount(s);
   UTF7ToASCII  = UTF7Encoding.ASCII.GetByteCount(s);
   //
   // ...
   //
}

私が得る結果は、によって与えられる結果よりも高いか低いかのどちらかですSystem.IO.FileStream.Length。何か案が?

編集:使用されるフレームワークは.NET2.0です

4

1 に答える 1

0

返された文字列からのsr.ReadLineストリップは、キャリッジリターン/ラインフィードの文字のカップルです。
返される文字列にはないが、ファイル全体の長さには存在するこれらの文字を数え続ける必要があります。

于 2012-06-27T09:26:30.790 に答える