昨日の今日でネタ晴らししちゃうのもせっかちすぎるので、今日はつれづれなるままにファイルの拡張子の話などを。

 

ファイル拡張子」と最初に出会ったのは、初めてコンピューター(シャープのポケコン、確かSHARP PC-1500/1501)に触った27歳の時。やはり"*.bas"で、その後の「7万円」のMSXでも、「20万円」のMZ-2500でもbasic言語プログラムは(中間言語ファイルでも)"*.bas"でしたね。実際当時は"(ファイル名 ascii 8文字).(拡張子 ascii 3文字)"が「法」でしたから。オペレーティングシステムもまだMS-DOSが新興物でCP/Mが「本家」でしたが、実行ファイルが"*.com"、機械語ファイルが"*.obj"や"*.lib"など、今でお見かける名前ですね。16bit系でも、当時は実行ファイルは64KB以内の*.comが主流で、リロケート可能な"*.exe"のプログラムは80年代に入ってから一般的になってきたと記憶しています。

 

MS-DOSが興隆して、Windows 3.1(16bit)に至る過程でも、依然"(ファイル名 ascii 8文字).(拡張子 ascii 3文字)"は健在で、Windows 3.1で長いファイル名を付けたり、表示したりできましたが、それらは「別名(Alias)」で、実際にシステムで使うのはショートバージョンでした。また、拡張子はアプリケーションベースで多様化してきました。(例:*.doc、*.xls-これを「一覧」というのはちょっと大げさですね。、暇な人はこれも眺めてください。)

 

参考までに、以下に私が米国にいた時(1991 - 1996)に入手した、16bit Windows 3.1ベースのMIDIデータ作曲、編集ソフト Session.exeの画像を紹介します。

中央にあるのが当時の「ファイルを開く」ダイアログで、"Music Data"というフォールダーが、システム的には”MUSICD~1""Sound Vision.mid"というファイルが"SOUNDV~1.MID"という ascii 8文字に代えられているのが分かります。この"(ファイル名 ascii 8文字).(拡張子 ascii 3文字)"という呪縛が解き放たれて、現在の「スペース文字も許す長文ファイル名(拡張子も3文字以上可)」となったのはWindows 95以降になります。(なお、このSessionはとてもよくできたソフトで、MIDIデータを18トラック迄楽譜化し、ミキサーシーケンサーで処理できる優れもので、現在もきちんと完動します。良いソフトウェアは旧さを感じさせませんね。)

 

プログラミング的には、フルパスファイル名を扱う場合の注意点として、

(1)ドライブ

(2)パス

(3)ファイル名

(4)拡張子

に分解する場合に「スペース文字も許す長文ファイル名(拡張子も3文字以上可)」が許される為、空白文字が含まれる場合にはフルパスが""で囲まなければなりません。

種々のライブラリー(MicrosoftのMFC、EmbarcaderoのVCL)がそのような場合に役に立つクラスを用意しています。(注)

注:MFCのCPathクラスやDelphiのTPathクラスなど。(WEBで調べるとSysUtilsクラスだと思うのですが、そこの解説を見るとこんなで、C++ Builderがどうなっているのかよく分かりません。)

因みにBCCSkeltonでもCARGクラスの以下メソッドが使えます。

    char* Drive();

    char* Path();

    char* FileName();

    char* Ext();

 

とりとめのない話でしたが、最後にもう一つ。拡張子の関連話題で、

「何故Microsoftはファイルパスにバックスラッシュ(日系コードでは"\")を使うのか?」

その答えはこの面白い記事に出ていました。