2006年02月15日

ファイル入出力とディスクリプタ

アプリケーションを作成する場合、どうしてもファイルアクセスは必須の項目になります。今回はまず、簡単にSeries60上でのファイルアクセスを見ていきます。また、ファイルの入出力ではどうしてもデータの格納先になるデータ領域が必要です。 Series60ではデータ領域をディスクリプタとして抽象化することが可能です。ディスクリプタは今回の後半で見て行きます。
ファイルサーバ

 ファイル入出力の話をする前に、ファイルサーバの話をする必要があります。これまでも述べたとおり、Symbian OSはマイクロカーネルを採用しています。したがって、OSが提供すべきサービスの多くはサービスを代行するサーバアプリケーションによって担われます。

RFsクラス

 ファイル関連の操作の場合、ファイルサーバへのクライアント側の窓口はRFsクラスになります。このRFsクラスを用いて以下の操作を行います。

1. ファイルサーバへのセッションを確立する。
2. ファイルサーバへ、ファイル関連の要求をRFsクラスを通して行う。
3. 必要がなくなった時点でセッションを閉じる

 ファイルサーバへのセッションを確立するには、一般に次のようなコードを用います。

RFs fsSession;
// ファイルサーバへのセッションを確立
User::LeaveIfError(fsSession.Connect());
// ここで何らかの処理を行う。
fsSession.Close(); // 不必要になった時点でセッションを閉じる

 また、ファイルサーバへのセッションが残っている間にリーブが発生すると、セッションを閉じないままアプリケーションが終了する可能性があります。そこで、RFsクラスのインスタンスをクリーンアップスタックに積む必要がありますので、その時は、

CleanupClosePushL(fsSession);

とすれば、リーブ発生時にdeleteされる前にClose関数もあわせてコールされます。さらに、クリーンアップスタックからのポップとオブジェクト自体の削除を行いたければ、

CleanupStack::PopAndDestroy();

を呼び出すことで可能です。PopAndDestroyを呼び出すことで、セッションのCloseもあわせて行われます。

 また通常のアプリケーションであれば、上記の様に明示的にファイルサーバへのセッションを作成することなく、アプリケーション実行環境が用意しているデフォルトのセッションがあります。リソースの使用量などから、特に理由が無い限りはこのデフォルトのセッションを使うことをお勧めします。デフォルトのセッションは、

RFs &fs = CCoeEnv::Static()->FsSession();

と、することで取得できます。

 FRsクラスが提供する機能としては、主に以下のものがあります。

1. ファイルを表すRFileクラス、およびディレクトリを表すCDirクラスのインスタンスの取得
2. ディレクトリの作成や、ファイルおよびディレクトリの削除などの機能

posted by シンビアン at 16:31| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。