Indexへ
(14696)//【14695】//(14699)
------------------------
【タイトル】jwwで扱う為の、短いファイル名を取得する
【記事番号】 14695 (*)
【 日時 】09/02/04 19:21
【 発言者 】mirror

以下は長文の上、少なからず私見を含みます。


現在のjww(ver620)の幾つかのコマンドに於いては[短いファイル名]を使う必要が有ります。
特に、コマンドプロンプトに依存する外部変形機能ではファイルパスの処理は重要になります。

この[短いファイル名]とは、OS[window]が旧来の仕様[DOS]の下位互換の為に
ファイルパスに半角スペースを含む場合や、長いフォルダー名が存在するパス名の
[長いファイル名]を[8.3形式]と呼ばれる形式に変換して保持させているものですが
PC其々に固有の環境情報によりマッピングされています。
一定の命名規則は存在しますが、PC環境の変遷により付け替えられる場合があったり
レジストリを変更する事によりマッピング自体を行わなくする事も有ります。

残念ながらXP以降のwindowでは、[短いファイル名]は隠蔽されるようになって来ました。
PC其々に固有の[短いファイル名]を取得する、安全確実で一般的な手段は
アクセサリからコマンドプロンプトを選び[dir /x]を実行するぐらいという状況です。
今後についても、マッピングを含めて保証されているとは限りません。

外部変形機能等で使用するインタープリタの仕様にもよりますが
win32APIを実装する事が可能であれば、kernel32.dllを使用して下記の呼出しを行う事により
[長いファイル名]を元にして[短いファイル名]を取得する事が可能です。

DWORD GetShortPathName(
 LPCTSTR lpszLongPath, // NULL で終わるパス文字列
 LPTSTR lpszShortPath, // 短いパス名を格納するバッファ
 DWORD cchBuffer    // 短いパス名を格納するバッファのサイズ
);

但し、当該PCで[短いファイル名]がマッピングされているとは限りません。

現在確認している[短いファイル名]を使用する必要が有る、jwwのコマンドは
ShellExecuteに依存する[外部変形機能][タグジャンプ][外部エディタ呼出]等々ですが
その他にも有るかも知れません。
何れにしても、綿々と積み上がってきた有用な外部変形機能やshellスクリプト等を
今後のクラウドコンピューティング(或いはネットワークコンピューティング)の時代にも
活用させる為に、出来る対策は出来る者から考えておかなければいけないのかも知れません。