第6回 ファイル構造

このページをDeliciousに追加 このページをはてなブックマークに追加 このページをYahoo!ブックマークに追加

2001年12月22日(土)版

第6回 ファイル構造

"ソフコン2002 3rd Edition featuring l'agenda" - l'agendaでソフトを作ろう!

←第5回へ↑↑コンテストTOPへ↑↑→第7回へ

■フラッシュメモリとRAM

 l'agendaのファイル管理方法は独特である。それは、l'agendaでファイルを入れるところが、フラッシュメモリ(NANDディスク)とRAMの二つの領域に分かれているからである。

 具体的にはフラッシュメモリ領域は、\Nand Disk配下のフォルダであり、それ以外のフォルダは全て RAMに配置されている。

 フラッシュメモリは電池が無くなってもリセットしてもその内容が消えることはないが、RAM領域は電池が切れたり、リセットすると全て無くなってしまう。

 つまり、リセットをすると\Nand Disk配下以外のフォルダ、つまり、\Windowsや、\My Documents、\Program Filesなどにあるファイルは全て消えてしまう(初期化されてしまう)のである。

 なぜ、このようなことになっているか、というとこれは処理速度を高速化するためである。電源が入ると、BE500は、フラッシュメモリの中から必要なファイルをRAM領域にコピーし、キャッシュする。このようにして高速化を図っているのである。また、フラッシュメモリに入っているデータは電池が切れても消えない。つまりバックアップ電池がいらなくなるわけである。

■データ保存は\Nand Disk\My Documentsに

 しかし、プログラマにとっては、これはいろいろと特別な処理が必要になってくる仕様である。まず、ファイルを保存する領域であるが、普通のソフトのように My Documents に保存していると、これはリセット時に全てファイルが消えてしまうことになり、非常にまずい。ファイルは、\Nand Disk配下のMy Documentsに保存すべきである。なお、このフォルダ名(\Nand Disk\My Documents)は、GetUserDiskName関数で取得することが出来る。


     #include <getdisk.h>

     TCHAR DefaultPath[MAX_PATH];
     GetUserDiskName(m_hInstance,DefaultPath,MAX_PATH);

 ファイルを保存するデフォールトのフォルダもこのフォルダにすべきだろう。
なお、GetUserDiskName関数を使うときには、GetDisk.Libファイルをリンクしなくてはならない。[プロジェクト]-[設定]の「リンク」で「オブジェクト/ライブラリ モジュール」にGetDisk.Libを付け加えよう。

■プログラムは\Nand Disk\Program Filesに

 また、データだけではなく、プログラムもインストールは\Program Filesにすべきではない。これもRAMであり、リセット時に消えてしまうからだ。プログラムをインストールするフォルダは、\Nand Disk\Program Files にすべきである。

 なお、ルートにある \Program Disk というフォルダは、この\Nand Disk\Program Filesがキャッシュされたものである。

 もっとも、BE500の場合には、専用インストーラ作成ソフトを使ってインストーラを作るので、この専用インストーラを使う場合にはそれほど意識する必要はない。ただ、何かプログラム側でファイルを作って保存しておく必要がある場合、\Nand Disk配下に保存しないといけないことは意識しておかなければならない。

 このようにいろいろとプログラムの修正点があるNand Disk対応だが、ファイル管理以外でも影響がでてくる。その中で一番ソースの修正が必要になるのはレジストリ関係だろう。これについては次回に対応方法を紹介しよう。




第6回 ファイル構造

Reported by 古原伸介


Last-modified: Sun, 24 May 2009 23:45:30 JST (3100d)