街中で見かけて「グッときた人」の思い出

C言語初心者です。
昨年末、C言語の講習時に友人に「例えば100Kくらいのテキストファイルを
とあるメモリにコピーする場合、ファイル単位でコピーするのと
バイナリ単位でコピーするのはどっちが早いでしょう~?」みたいな
ことを言われました。
考えてもよく分からなかったので、実際にコーディングをして実行時間を
計ってみようと思ったのですが、ファイル単位とバイナリ単位でデータを
コピーするには具体的にどのようにしたらよいのでしょうか?
fopenでテキストファイルをオープンして内容を読み込み、
読み込んだデータをfopenで新規ファイルへ書き込む。
この方法だと、バイナリ単位ということになるのでしょうか?

A 回答 (2件)

 「ファイル」と「バイナリ」は対語ではありませんので、混乱なさるのも無理のないことです。


 「ファイル」とは、ディスク上にある情報単位、「バイナリ」とは、そのファイルの内部形式ですので、「ファイル」というものの種類の1つとして「バイナリファイル」というものがあることになります。

 よってこの場合、「テキスト形式とバイナリ形式ではどっちが速いでしょう」という設問にすべきです。

 やり方としては、オープン時に、

  fopen( "www.txt", "r" );

 こうするとテキスト形式での読み込み、

  fopen( "www.txt", "rb" );

 こうするとバイナリ形式での読み込みになります。

 テキスト形式では、fgets() 関数での読み込み時に、改行のところまでで読み込んでくれたり、改行文字を2バイトから1バイトへ変換してくれたりする機能が付加されますので、理論上はそのような変換処理のないバイナリ形式の方が高速です。

 もっとも最近のパソコンだと、ミリ秒で計測しても違いが分からないかもしれません……(^_^;
    • good
    • 0
この回答へのお礼

回答して頂き、ありがとうございます。
>「テキスト形式とバイナリ形式ではどっちが速いでしょう」という設問にすべきです。
これは、テキストファイルをコピーする場合という意味ですよね?
それならば理解できるのですが、他のファイル形式(例えばexeファイルとか)を
コピーする場合にはどうなのでしょう?
同じなのでしょうか?

お礼日時:2003/01/07 09:44

 最初からバイナリ形式で記録されているファイルを、テキスト形式でコピーしてはいけません(^_^;


 テキストの読み込み/書き込みでは、改行文字に関する処理が自動的に付加されるため、バイナリファイルをテキスト形式でオープンすると内容が破壊されるためです。

 テストとして仮にそういうプログラムを組むとしたら、しょせんデータはデータです。テキストファイルと変わりません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
おかげさまで頭の中がすっきりしました。

お礼日時:2003/01/07 12:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!