Tools.h++ 7.0 ユーザーズガイド: 6 - クラス RWFile の使用法

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.

# クラス RWFile の使用法 | # 6 |

クラス RWFile は標準 C のファイル操作のうち、バイナリでの読み書きをカプセル化しています。これには ANSI-C の関数 `fopen()`、`fwrite()`、`fread()` などが使用されています。このクラスは Interviews Class Library (1987年、スタンフォード大学) のクラス PFile にもとづいて作成されていますが、"`const`" 修飾子を使用して、さまざまなオペレーティングシステムに移植するように Rogue Wave で修正されています。メンバー関数の名前は大文字で始まりますが、これはクラス PFile との互換性を維持するためです。

クラス RWFile のコンストラクタは次のプロトタイプを持っています。

      RWFile(const char* filename, const char* mode = 0);

このコンストラクタは、`filename` というバイナリファイルをモード `mode` (標準 C の `fopen()` 関数で定義されるもので、たとえば "`r+`") でオープンまたは作成します。`mode` がゼロ (デフォルト) の場合は、既存のファイルが更新用にオープンされます (UNIX ではモード "`r+`" で、Windows ではモード "`rb`+")。既存のファイルが存在しなければ新たに作成されます (モード "`w+`" および Windows では "`wb+`")。このクラスのデストラクタがそのファイルをクローズします。

RWFile を作成した後には、メンバー関数 `isValid()` を使用して、ファイルのオープンが正常に行われたかどうかを検査する必要があります。

ファイルをフラッシュする (内部バッファにためられたデータをファイルに書き込む) ためのメンバー関数、およびファイルが空か、エラーがあるか、あるいはファイルの終わりか等を調べるためのメンバー関数があります。

## 例

クラス `RWFile` には、ファイルの状態を判別するためのメンバー関数や、さまざまな組み込み型を一度に 1 つずつ、あるいは配列として読み書きするためのメンバー関数があります。ファイルポインタの位置を、関数 `SeekTo()`、`SeekToBegin()`、および `SeekToEnd()` で再設定することができます。`RWFile` クラスの機能の詳細は、『Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル』に記載されています。

たとえば、ファイル名を "`test.dat`" にして `RWFile` を作成し、`int` 型のデータを読み取り (ファイルが空でない場合)、その値に 1 を加えて再びファイルに書き込む場合は、次のように記述します。

    #include <rw/rwfile.h>
    main(){
       RWFile file("test.dat");              // RWFile を作成する

       // このファイルが存在するか、また読み取りや書き込み
       // パーミッションを持っているかをチェックする
       if ( file.Exists() )
    {
         int i = 0;
         // このファイルが空でなければ int を読み取る
         if ( !file.IsEmpty() ) file.Read(i);
         i++;
         file.SeekToBegin();
         file.Write(i);                          // int を書き換える
       }
       return 0;
    }