2012-02-06 7 views
1

テキストファイル(最大長300MB)を読み込み、その中でパターン(最大長100)を検索したいと考えています。最初は、charテキスト[1000000000]とfreadを使ってテキストファイルを読みました。しかし、私は次のコードを使用した方がよいことがわかった。フリーダのC言語でのエラー

tFile = fopen("d:\\text.txt","r"); 
if(tFile==NULL){ 
    fputs("Text File Error",stderr); 
    exit(0); 
} 
fseek (tFile,0,SEEK_END); 
tSize = ftell(tFile); 
printf("%d\n",tSize); 
rewind(tFile); 
tBuffer = (char*) malloc (sizeof(char)*tSize); 
if (pBuffer == NULL){ 
    fputs ("Memory Error",stderr); 
    free (tBuffer); 
    exit (0); 
} 
tresult = fread(tBuffer,sizeof(char),tSize,tFile); 
if (tresult != tSize){ 
    fputs ("Reading Error",stderr); 
    free (tBuffer); 
    exit (0); 
} 
fclose(tFile); 

私も(tBuffer)自由を書きました。私のメイン()の終わりに。私はテキストファイルに2行、各行には10文字を持っています。プログラムをデバッグすると、tSizeは24になり、結果は22になります。したがって、プログラムは終了します。私は問題が何であるか理解できません。

+1

'" rb "'で開いてみてください。そこに改行の変換があるのだろうかと思います。 –

+0

ありがとうございます。できます.......... –

答えて

1

Windows上でテキストモードでファイルを開くと、行末を表す文字が変換されます。行末を表すシーケンスCR/LF(改行/改行)がLFに変更されます。これは、ファイルから読み取ったバイト数が必ずしもファイルのサイズと等しいとは限りません。

バイナリモード(fopen(filename, "rb"))でファイルを開くと、そのような改行は行われません。テキストファイルを扱っているので、テキストモードで開くのが良いでしょうが、読み込み量がファイルサイズより小さくなるようにしてください。