Previous Next Contents Index


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;
}




Previous Next Contents Index