- - PR -
カレントパス
パス周りをもう少し続けます。
表3の#4のような文字列が渡されてきた場合、RFile::Open()はどこにあるファイルを開くのでしょうか。答えは、「RFsが管理している起点パスに対する相対パスとして解釈し、絶対パスに解決する」です。RFsが管理している起点となるパスをセッションパス(注7)といい、RFs::SetSesstionPath()メソッドで設定します。
- RFsはファイルサーバに対する接続(セッション)でしたね。こんなところにクラサバベースであるところが出てきます。
| 注7:表1で説明したパス、ファイル名解析は、実はRFsでも提供されています(RFs::Parse())。このAPIはTParseシリーズと異なりカレントパスの補完を行ってくれます。 |
Exercise-2
では、Exercise-2です。セッションパスの設定が効くことを確認するために、図2にあるECommand2ハンドラで行っているファイルのオープンを相対パス形式で行ってみましょう。ファイルをオープンするまでにRFs::SetSesstionPath()で必要なパスを設定するのがポイントとなります。パス文字列自体の生成はExercise-1の応用です(See TParseBase on DocBrowser)。

図4 Exercise-2 解答例
どうでしょう。動きましたか? 上記コードだけでは、相対パスの補完にセッションパスを使っている証明として不十分です。RFs::SetSessionPath()に対してparser.DriveAndPath()を渡すのではなく、
_LIT( KFormatString, "c:\\nodir\\" ); |
という存在しないパスを設定して実行してみてください。何が起きるでしょうか。
ストリーム
クラサバ編で行ったRFs、RFileの説明と今回の解説で、ファイル操作のあらましはお伝えできたと思います。では次回からいよいよGUI環境の解説に向かいます。お楽しみに!
と終われればよいのですが、図2のコードにはまだ説明していないことが残っています。

図5 ECommand2ハンドラの未解説部分
RFileからの読み出し結果をHBufCのインスタンスに直接受けるわけではなく、いったんRFileReadStreamというクラスのインスタンスを構築し、それ経由で値の設定を行っています。ここで用いられている機能はストリームといい、ファイル操作の上位に位置する概念です。Symbian OSではこの機能を用いてインスタンスの永続化処理を実現しています。では早速説明を、といきたいところなのですが、それには少々紙幅が足りないようです。うむむ……。
◇
ラッピングの仕方に差異はありますが、Symbian OSにおいてもごく一般的なファイル操作機能が提供されていることがお分かりいただけたと思います。ただし、これだけではインスタンスの永続化処理という、OO環境に必ずついて回る問題をうまく片付けることはできません。というわけで次回、GUIプログラミングの説明をお待ちの方には申し訳ないのですが、基本編にもう1回だけ誌面を使ってストリームの解説を行いたいと思います。(次回に続く)
組み込み開発フォーラム 新着記事
- フルスクラッチの“Hello World”を動かしてみよう(2011/3/31)
- FlexRayプロトコルの概要(その2)(2011/3/29)
- JASA、東北地域に拠点を置く会員企業を支援(2011/3/25)
- NEC、震災の影響を受けた4拠点の生産再開を発表(2011/3/23)
- 内部ブロック図の基礎と共通要素(2011/3/22)
- インテル、被災地におけるITインフラの復旧を支援(2011/3/22)
- Facts on AUTOSAR/AUTOSAR導入の現実(2011/3/18)
- 計測器・震災被害ホットラインを開設、テクトロニクス(2011/3/18)
- ZMP、地震の揺れを多角的に計測するアプリ無償配布(2011/3/16)
- メンター、3Dテレビ・マルチメディア検証プラットフォーム(2011/3/16)
- 【番外編】タチの良い計測値、悪い計測値とは?(2011/3/15)
- tarファイルシステムをAndroidに組み込む!!(2011/3/10)














