ReadFileとfgets

Windows APIでファイルの中身を読み出すものといえば、「ReadFile」
しかーし、このAPIでは引数に必ず読み取り用バッファのサイズを指定します。
つまり、「テキストファイルの中身を1行ずつバッファに放り込む」なんて事は
そのままじゃぁできないわけですよ。奥さん。


でもですよ、標準ライブラリの「fgets」の仕様はこうなってます。

(http://www.bohyoh.com/CandCPP/C/Library/fgets.htmlより)

fgets関数は、streamが指すストリームから文字列を読み取りsが指す配列に格納する。読み取る文字数の最大値はn - 1とする。改行文字を読み取ったとき、またはファイルの終わりを検出したときに、文字の読取りは終了し、読み取った改行文字も配列に格納する。そして、最後に配列に格納した文字の直後にナル文字を書く。


つまり、以下のように「テキストファイルの中身を1行ずつバッファに放り込む」ことが
簡単にできてしまうわけです。

fp = fopen("hoge.txt", "r");

while(fgets(buf, sizeof(buf), fp) != NULL){
printf("%s\n", buf);
}
fclose(fp);


これをWindows APIでやろうとするとかなりめんどうです。
一旦バッファに格納してから改行文字で切り分けて。。。とか
まぁ、便利なものがあるならそれを使いましょうよ。