ファイル関連付けの探検
パソコンで作業をするときに、最初に起動させるアプリケーションは何だろうか。
私の場合は、エクスプローラである。エクスプローラといっても、インターネット用のブラウザ「インターネットエクスプローラ」ではなく、Windowsに添付されているファイル管理用のエクスプローラである。
新規にファイルを作る場合には、ワープロや描画などのアプリケーションを起動して、そこで作ったものを適当なフォルダに保存するということもあるが、作業の多くは既存のファイルを書き換えたり引用したりするものである。
その場合、アプリケーションを起動してから、「ファイルを開く」のメニューで既存のデータファイルを読み込むよりも、エクスプローラで目指すファイルを表示してダブルクリック(あるいは右クリックで開き方を指定)するほうが効率的である。
例えば、拡張子が「jtd」のファイルだとワープロ一太郎の文書ファイルなので、これをダブルクリック(または「開く」)すれば、一太郎がこのファイルを読み込んだ状態で起動するという具合である。
これができるのは、データファイルの種類(拡張子)とアプリケーションが関連付けられているからである。
この関連付けは、パソコン購入時から設定されているものもあるし、アプリケーションを新しくインストールしたときに(アプリケーションによって勝手に)設定されることもあるのだが、パソコンユーザーが自分で設定することもできる。
これは「フォルダオプション」から行う。Windows98以降だと「スタートボタン」(タスクバーの左端)から「設定」で入ることもできるが、「マイコンピュータ」または「エクスプローラ」の「表示」メニューから「フォルダオプション」(Windows95の場合は「オプション」)で開くことができる。
これで「ファイルタイプ」のタブをクリックして「編集」ボタンを押すことで、関連付けを変更したり追加したりすることができる。(詳しい手順については省略する)
画像データの「jpg」「gif」ファイルは、初期設定だとブラウザの「インターネットエクスプローラ」に関連付けられていることが多いが、画像を見るためだけに(少々)動作の重いブラウザを起動するのも面倒なので、別な画像ビューワーをインストールしている人も多いだろう。私の場合は「ACDSee」というビューワーを使っている。
ほとんどのビューワーだと、インストールした時点で、それが標準ビューワーになるようにファイルの関連付けが行われる。
画像を見るだけであれば、それで十分なのだが、画像ファイルを編集したいとなると、一般的には画像処理(フォトレタッチ)ソフトを使わなければならない。画像処理ソフトでもインストールすればそれなりの関連付けは行われるが、「フォルダオプション」で設定するような(マイコンピュータまたはエクスプローラでファイルを表示して、右クリックで画像の編集を選択できるような)関連付けは行われないことが多いようだ。
私の場合は画像処理に「ペイント・ショップ・プロ」の古いバージョン(4.2J)を使っているが、これを起動してからファイルを読み込むのではなく、エクスプローラで目的のファイル名を指定し、それを読み込んだ状態で画像処理ソフトが起動するほうが具合がよいので、「フォルダオプション」でそれができるようにしていた。(インターネットから取ってきた画像とか、デジタルカメラで撮った画像などを扱うには、この方法が便利である)
ここまではよいのだが、ある日、この方法(エクスプローラでファイル名を指定し、画像処理ソフトを起動する)で作業をしようとしたら、画像処理ソフトは起動したものの、「ファイルを開くことことができません」というエラーメッセージが出て、ファイルを読み込めないという事態が発生した。
何度やっても同じだったので、不思議に思い、画像処理ソフトを起動してからファイルを開くという手順で行ったら、今度はちゃんと読み込めたのである。
これはどうしてだろう?と疑問に思い、いろいろ調べてみたところから、私の「ファイル関連付けの探検」が始まった(^^;)
画像ファイル(仮にファイル名を「xx.jpg」とする)を置いていた場所は、メインドライブの中の「Program Files」フォルダの中に置いた「camera」というフォルダの中の「data」というフォルダであった。(普通はそんなところにフォルダを作ることはないのだが、フォルダの移動を行ったときに偶然そこに作ってしまったので、そのまま使ってみた)
試しに、もっと階層の浅い場所(メインドライブのルート)に「data」というフォルダを作って、そこに画像ファイルをコピーしてみたら、今度は問題なく(エクスプローラを使った方法で)読み込めた。
そこで、私が考えたのが「画像ファイルを置いたフォルダの階層が深すぎたのではないか」ということだった。
Windowsで扱えるファイル名は、半角文字で255文字以内ということになっている。この画像ファイル(エクスプローラを使って読み込めなかったもの)をルートから書くと「c:\Program Files\camera\data\xx.jpg」となる。
これだけでは255文字にはならないのだが、少し長いのかなと思って、次のような実験をしてみた。
さきほど、うまく読み込めた「c:\data」フォルダの中にどんどん深い階層のフォルダを作り、画像ファイルの「xx.jpg」をコピーしていったのである。具体的には次のようになる。「c:\data\data01\data02\data03\data04‥‥」このような作業を続けていって階層が30数段目になったところで新しいフォルダを作れなくなった。文字数を数えるとたしかに255文字のあたりで「新しいフォルダを作成出来ません。ファイル名または拡張子が長すぎます」というメッセージが出る。(フォルダを作ることができる最後の場所に画像ファイルをコピーしようとすると、コピーできないという現象が出ることもある)
しかし、この場合はフォルダが作れないという現象が起きるだけであって、前述した「ファイルを開くことができません」という現象とは異なる。フォルダを作ることができるぎりぎりの場所に置いた画像ファイルは、エクスプローラを使う方法でちゃんと画像処理ソフトが起動して読み込むのだ。
前述の「c:\Program Files\camera\data\xx.jpg」程度の長さの(パス名を付加した)ファイル名では255文字を超えるということでもないので、長さが問題ということでもなさそうだ。
次に考えたのが、「Program Files」というスペース(空白)を含むフォルダ名に問題があるのではないかということだった。
これは正解だった。
ためしに、Cドライブに「c:\ProgramFiles2」というフォルダを新しく作り、上の例と同じようなファイル(「c:\ProgramFiles2\camera\data\xx.jpg」)を作ってみた。これは問題なく読み込むことができた。ファイル名の長さは全く同じなのに結果に差があるということは、「Proguram」と「Files」の間の空白が悪さをしているらしい。
そこで、前に読み込むことのできた「c:\data\xx.jpg」で実験をした。フォルダ名を「data」から、空白を含んだ「d ata」に変えてみたのである。案の定、これだと読み込めなかった。
私が関連付けた方法ではファイル名(パス名)に空白が含まれると読み込めないことがわかったのだが、現実には空白を含むパス名のフォルダに置かれたファイルも(エクスプローラを介して)問題なく読み込めるアプリケーションも多い。私が使っている画像ビューワーの「ACDSee」もそうである。
そこで、それらのアプリケーションとファイルの関連付けを「フォルダオプション」で見てみた。すると下のように「DDEを使う」というところにチェックがついており、いくつかのオプションらしきものが記入されていた。

私が関連付けた、ペイントショッププロとJPGファイルの関連付けを見てみたら、「DDEを使う」にはチェックが入っていなかった。そこで「使う」にチェックを入れてみたが、これだけではうまくいかなかった。「DDEメッセージ」の部分にも記入が必要なようである。
実はここに何を書いてもよいというわけではないのだが、私の場合は他の関連付けなどを参考にして「[open("%1")]」を書き入れたら、今度は問題なく動作するようになった。
反対に「ACDSee」でも、「DDE」を外してしまうとうまく動作しなくなった。(アプリケーションがファイルを読み込まない状態で起動する)やはり「DDE」がカギのようだ。
これで解決したのでOKなのだが、無事に動けばそれでよいということではなくて、どうしてそうなるのかを知りたい私なので、いろいろと調べてみた。
まず、「DDE」のことだが、これは「Dynamic Data Exchange」の略で、日本語では「動的データ交換」と訳されている。それ以上のことはわからなかったのだが、MS-DOS時代の体験から考えると、ファイルの在処を絶対パス的(相対かな?)に扱うための引数を使えるようにするもののようだ。
エクスプローラを介しないでアプリケーションからファイルを開いていく場合は、(MS-DOSでいえば)「チェンジディレクトリ」のようなかたちで、読み込みの対象とするフォルダに階層的に移動していくようだが、エクスプローラを介した場合は次のようになるらしい。
[動作するアプリケーション] [動作の対象となるファイル名] [オプション]
ここで、ファイル名がきちんと認識されればよいのだが、アプリケーションのほうでファイルのパスをきちんと読めないと、ファイルを読み込まないでアプリケーションだけが起動するという現象が起きるようだ。
それを解決するのが「DDE」ということらしい。ただ、アプリケーションによっては「DDE」を使う必要がないものもあるし、逆に「DDE」に対応していないものもあるようだ。これはアプリケーションの開発時期も関係しているように感じた。
「DDE」については、このぐらいなのだが、こうやってアプリケーションとファイルを関連付けた結果は、コンピュータのどこに記憶されているのかも気になった。
そこで、関連付けを変更した直後に、更新された最新のファイルを調べてみたら、ルートドライブの「Windows」フォルダにある「System.dat」というファイルがそれらしい。かなり大きいファイルなのでメモ帳では開けないが、ワードパッドでは読み込むことができる。完全なテキストデータではないので文字表示が崩れる部分も多いが、その中に、先ほど変更した関連付けに関する部分を見つけることができる。これはなかなか見つけにくいので、関連付けをする際に「アクションの編集」のところで、アクション名に「金太郎」などのいい加減な名前をつけて「System.dat」を開いた際にその名前(金太郎など)で検索をすると簡単に見つけることができる。
しかし、このような表示の文字化けばかりのデータを編集することは不可能であるし、この「System.dat」ファイルが関連付けを直接指定しているという保障もないので(コンピュータ内部のデータを表示しているだけかもしれない)下手にいじるのは危険であろう。
実は、こういった関連付け等を編集するプログラムがWindowsには標準で準備されている。それが「regedit.exe」(レジストリエディタ)である。これは「Windows」フォルダの中に入っている。
エクスプローラやマイコンピュータで「Windows」フォルダを開いて「regedit.exe」を実行してもよいし、「スタート」ボタンから「ファイル名を指定して実行」を選んで、キーボードをたたいて「regedit」と入力してもよい。
すると下のような画面が開くので、「HKEY_CLASSES_ROOT」を開いて、関連付け等について編集することができる。これがいわゆる「レジストリの編集」である。

この編集結果は前述の「System.dat」にも反映されているが、レジストリエディタの作業は、いちいちファイルの保存をしなくても(実際にはその機能がない)すぐにコンピュータの動作に反映されるので、コンピュータ内のRAMを直接いじっているのかもしれない。(「System.dat」の変化はそれを表示しているだけかもしれないが、私はそのへんについては研究不足でよくわからない)
このレジストリの内容は「レジストリエディタ」の「レジストリ」メニューで「レジストリファイルの書き出し」を行うと、拡張子が「reg」のテキスト形式のファイルが作られるので、これをワードパッド等で開いて内容を見てみると、なかなか面白い。
「ファイルを開くことができません」というメッセージが出たことから、疑問が生まれてあれこれと調べてみて、いろいろな知識も増え、それなりに使い勝手もよくなったのだが、わかるまではなかなか大変である。しかし、コンピュータの中の探検ごっこだと思えば、けっこう楽しい(^^;)
たいくつなときなどは格好の暇つぶしになるだろう。(もっとも私は暇がないときに限って、こういうことをしてしまいがちだが‥‥)
探検ごっこのようなものだから、新しくわかることもあるが、探検するほどに新たな疑問も出てくる。例えば次のようなのも、その1つだ。
ファイルの関連付けの「アクションの編集」で「アクションを実行するアプリケーション」の欄に「"C:\PROGRA~1\MICROS~2\iexplore.exe"」のように表示されていることがある。実際には「c:\Program Files\Microsoft Internet\iexplore.exe」なのだが、「~1」「~2」などのようにパスのフォルダ名を省略しているのである。

「アクションを実行するアプリケーション」の枠に収まるように短くしているのかもしれないが、必ずしも全ての場合でそうなっているわけではない。枠に収まらない長さで、カーソルをスクロールしないと見ることができないというものもある。
また、長いパス名を「~2」のように省略するといっても、上記の「MICROS~2」の場合、私のパソコンだと「c:\Program Files\Microsoft Internet\」の他にも「c:\Program Files\Microsoft Exchange\」と「c:\Program Files\Microsoft Reference\」というフォルダもあるのでどうやって区別しているのかも謎である。
フォルダオプションの画面でだけ、表示上の都合で省略形を使っているのかとも思ったが、前述の「System.dat」や、レジストリファイルを見てみると、その中でも「~1」「~2」などが使われているので、コンピュータ内部でもそういう扱いになっているようだ。
これらの省略形について、自分なりに推理してみたら、次のようになった。
まず、パスとして扱われるフォルダの名前が半角8文字を超える場合は、最初の6文字に「~1」をつけたかたちにして省略する。
前述の「\Microsoft Exchange」「\Microsoft Internet」「\Microsoft Reference」のように省略すると「Micros~」と同じになってしまう場合は文字順(E・I・Rのように)に1から順に「~1」「~2」「~3」のようにする。(私のパソコンでは実際にそうなっていた)
ただし、必ず省略形を使わなければならないということはないようで、長いパス名(空白を含んだものもある)をそのまま使っている場合もかなりあった。
この手の話題になると、ついついくどい表現をしてしまいがちなので、今回はなるべく簡単に書いたつもりである。そのため説明が不十分なところもあることをご容赦いただきたい。(私が自分なりに考えたこともあるので、間違っているものもあるかもしれないし‥‥)
なお、今回の内容について調べたときに、とても参考になるサイトを見つけた。そこかで知ったことも、今回の文章中にはかなり使わせていただいている。Q&A形式で図解も多くわかりやすいサイトなので、詳しく知りたい方はこちらを参照されることをお勧めする。
<00.09.08>
ホームページに戻る
うんちく目次へ