アプリケーションを作っていると、初期条件の設定やいろいろな情報をプログラム自身が保存するする必要がでてきます。このとき、ファイルの入出力関係の処理を避けて通ることができません。ファイルの入出力関係の処理には結構「しきたり」のようなものがあって慣れるまで悩みます。なにか1つ、自分用に「ひな形」になるような単純なプログラムを用意しておいて参考にするのがよさそうです。
第19回 - フォルダ内にあるファイル名の記録-
今回は、ファイルやフォルダ関係のプログラムです。ブラウザにIE4.0を使ってみたところ、メモリーの使用量は少なく、メーラーはマルチアカウントに対応してかなり使いやすいものでした。しかしながらネットスケープと比較して画面の表示が異常に遅いため、やはりネットスケープを使うことにしました。そこでIE4.0をはずすために、例のごとく機能拡張の中身をあさったわけです。システムを入れ替えた直後のアイコンにはラベルを付けていましたが、それ以後の追加には印がなく、あいかわらずの手探り状態になってしまいました。機能拡張フォルダの中身を通常のテキスト書類にしておけば、比較するのは簡単だろうと考えました。
ファイルの入出力に関しては、サンプルプログラム「ShowFolder Ver1.0b」と「 LookFolder Ver1.5e」内にかなり注釈の形で説明を加えていますのでそちらの方を御覧ください。また、第8回の「どこでもクロックVer1.0.5」で、PICTファイルの読み込みと、テキストファイルの書き出し、読み込みを行いましたので参考にして下さい。
フォルダ内のファイル情報の獲得には以下のような書式が必要です。
f と gをfolderitem型で宣言します。
f = GetFolderItem(" ")
g = f.parent
のようにするとカレント(現在の)フォルダの情報が「g」に入ります。このとき「f」のファイル名「f.name」は「""」となっています。
この状態で、
「g.absolutepath」がこのフォルダの絶対パス。
「g.count」がこのフォルダ内のファイルなどのアイテムの数。
「g.item(n).name」がこのフォルダ内のファイルなどのアイテムの名前を示すプロパティ。
「g.item(n).mactype」がこのフォルダ内のファイルなどのアイテムのタイプを示すプロパティ。
「g.item(n).maccreator」がこのフォルダ内のファイルなどのアイテムのクリエターを示すプロパティ。
「g.item(n).directory」がこのフォルダ内のフォルダとファイルをtrueとfalseで表すプロパティ。
「g.item(n).visible」がこのフォルダ内のアイコンの表示と非表示をtrueとfalseで表すプロパティ。
を表します。
「ShowFolder Ver1.0b」は同じフォルダー内にあるすべてのファイルを、テキスト書類にして書き出すサンプルです。
書き出すファイルの情報の追加する方法
- REALbasicで「ShowFolder Ver1.0b」のファイルを開きます。
- EditメニューからEditorSettingsを開きSource EditorのFontをOsakaにします。
- ProjectのウインドからWindow1をダブルクリックすると「フォルダー内のファイルを表示」とタイトルの付いたウインドウが開きます。このウインドウにある「表示」ボタンをダブルクリックします。するとCode Browser(Window1)のタイトルの付いたウインドにプログラムコードが表示されます。 ここを変更してみて下さい。
たとえば以下のように太字の部分を変更すると、修正日を作成日に変更してListBoxに表示できます。//表示ボタン dim a , md as string dim f , g As folderitem dim n as integer //カレント(現在の)フォルダの情報を「f」に代入。 f = GetFolderItem(" ") //このとき「f」のフォルダー名「f.name」は「""」です。 //これでカレント(現在の)フォルダの情報が「g」に //入ります。 g = f.parent //StaticText3.Text = "fフォルダー名 "+f.name StaticText2.Text = "フォルダー名 "+g.name StaticText1.Text = "絶対パスです "+g.absolutepath StaticText3.Text = "ファイルの数 "+str(g.count) //「g.count」はフォルダー内のアイテムの数です。 listBox1.deleteallrows // for n=1 to g.count md="["+g.item(n).creationdate.shortdate+"] // //フォルダーかそうでないかの判定して修正日や //ファイルタイプやクリエィターも一緒に表示。 if g.item(n).directory then a="(フォルダーです)" else a="("+g.item(n).mactype+")<"+g.item(n).maccreator+"> " end if listbox1.addrow md+a+g.item(n).name next
以上のように変更できます。
「ShowFolder Ver1.0b」を使って、初期設定フォルダを調べてみましたら。アイコンには表示されていない「Date Preferencs」なるファイルが表示され、書き出したファイルには、このファイルの後に空白の行が一行つけ加えられました。このように、ファイル名が「ファイル名」+「改行」となっているファイルは、他にもアイコンだけのファイルなどがあります。どうも例外的な属性をもつファイルのようです。
さらに、前もって書き出しておいた、記録ファイルと比較ができる「 NewItem09」を作ってみました。
今回は、なにやらユーティリティーめいたものになってしまいました。
「 NewItem09」の説明
- 新しいフォルダ内で「NewItem09」を走らせると、「機能拡張」「初期設定」「コントロールパネル」「フォント」の各フォルダーの中身をテキストファイルで書き出すことが出来ます。記録ファイルとなります。
- 前もって保存していた記録ファイルがあれば、読み込んで現在の内容と比較することが出来ます。このとき、増加したファイルだけを選択して表示します。減少したファイルについては対応していませんので、みなさんで考えてみて下さい。
- 新しいアプリケーションをインストーラーでインストールする直前に記録ファイルを作っておくと、インストールすることによって付け加えられたファイルを簡単にテキストファイルで記録として残せます。
ほとんどの情報は、メニューのReferenceを選ぶと開くOnline Referenceより得ました。ObjectsのFolderItem Objectにあるサンプルが参考になります。
今回の「ShowFolder Ver1.0b」と「 NewItem09」の ソースプログラムです。
ドラッグ&ドロップに対応した「LightFiles01a」も作ってみました。
プロジェクトファイルのみです。REALbasicの最新バージョンが必要です。30 kバイト
ソースコードについての質問やご意見がありましたら以下のアドレスまでご連絡下さい。
koko-@mx2.tiki.ne.jp