Last Update : 2007/05/xx
ファイルのフルパスから、ファイル名部分、拡張子部分、フォルダ(ディレクトリ)部分を切り出し取得できる関数です。関数名の由来は、そのまま「get path」から。
HSP2では命令形式で提供されていましたが、HSP3では記述法が変わった以外で、処理自体の仕様変更は特にありません。
getpath (元々のファイルパス, 切り出しタイプ)
第1パラメータには、元となるファイルパス文字列を指定します。
第2パラメータには切り出しタイプの値です。小文字変換を除いて全6パターンになります。たとえば、「C:\Program
Files\hsp30a\hsed3.exe
」というファイルパス文字列の切り出すと、赤部分が結果として返ってきます。
第2パラメータ 切り出しタイプ | |
0 | 単純な文字列コピー (使用する必要性なし)[ C:\Program Files\hsp30a\hsed3.exe ] |
1 | 拡張子部分を除いたファイルパス[ C:\Program Files\hsp30a\hsed3.exe ] |
2 | 拡張子のみ (ドット「.」含む)[ C:\Program Files\hsp30a\hsed3.exe ] |
8 | フォルダ部分を除いた拡張子付きファイル名[ C:\Program Files\hsp30a\hsed3.exe ] |
1+8 | フォルダ部分と拡張子部分を除いたファイル名[ C:\Program Files\hsp30a\hsed3.exe ] |
32 | ファイル名や拡張子部分を除いたフォルダ部分[ C:\Program Files\hsp30a\hsed3.exe ] |
16 | 英文字の大文字をすべて小文字に変換[ c:\program files\hsp30a\hsed3.exe ] |
ちなみに、自分自身の実行ファイルが置かれてるフォルダパスを知りたい場合は、dirinfo関数を利用します。自分自身の実行ファイル名も得たい場合はWin32 API関数を呼びます。(参照、HSP3 あれこれ ファイル)
◆ 拡張子とは? (参照、Wikipedia)
読みは「カクチョウシ」。Windowsの世界では、ファイル形式の判別文字になります。ファイル名の末尾に「ドット+任意の文字列」が付きます。任意の文字列は一般的に1〜3文字ぐらい。あくまで表面上の記号のようなもので、たとえば「.txt」(テキストファイル)を「.html」(HTMLファイル)に変更したら、内部データ関係なくWindowsはHTMLファイルとして認識します。
ちなみに、デフォルトのWindowsの設定では、登録済み拡張子を表示しないようになってるので、エクスプローラの[ツール]→[フォルダオプション]をクリックし、[表示]タブの[詳細設定]にあるツリー項目「登録されている拡張子は表示しない」のチェックを外しておくことをお勧めします(セキュリティの面からも重要)。
ファイルパス切り出し例のサンプルスクリプト〜。
; 元のファイルパス filepath = "C:\\Program Files\\hsp30a\\hsed3.exe" mes "元の文字列\t: "+filepath mes "モード0\t: "+getpath(filepath, 0) mes "モード1\t: "+getpath(filepath, 1) mes "モード2\t: "+getpath(filepath, 2) mes "モード8\t: "+getpath(filepath, 8) mes "モード1+8\t: "+getpath(filepath, 9) mes "モード32\t: "+getpath(filepath, 32)
ファイルパスに限らず、URLアドレス文字列も指定できます。
; 元のURLアドレス filepath = "http://lhsp.s206.xrea.com/command/getpath.html" mes "元の文字列\t: "+filepath mes "モード0\t: "+getpath(filepath, 0) mes "モード1\t: "+getpath(filepath, 1) mes "モード2\t: "+getpath(filepath, 2) mes "モード8\t: "+getpath(filepath, 8) mes "モード1+8\t: "+getpath(filepath, 9) mes "モード32\t: "+getpath(filepath, 32)
単純なファイル名から拡張子だけ取り除く。
mes getpath("hogehoge.exe", 1 + 8)
拡張子の先頭「.」(ピリオド)を取り除く。strmid関数やgetstr命令を利用しましょう。
filepath = "C:\\Program Files\\hsp30a\\hsed3.exe" fileext = getpath(filepath, 2) mes ".付き拡張子:"+fileext // strmid関数を利用する方法 mes "拡張子:"+strmid(fileext, 1, 64) // getstr命令を利用する方法 getstr fileext, fileext, 1 mes "拡張子:"+fileext
大文字の英文字列を小文字の英文字列に変換するタイプ16。他が切り出し処理なのに対し、「変換」という他のタイプと系統が異なります。で、このタイプは拡張子判定で威力を発揮します。
たとえば、取得したファイルがテキストファイル(*.txt)かどうかを拡張子から判定するとします。拡張子(ファイルパス文字列)というのは、大文字と小文字の区別がありません。つまり、「*.Txt」も「*.TXT」も「*.TxT」もテキストファイルなわけです。仮に拡張子に大文字が含まれていたとしても、うまく判定するよう小文字変換処理を保険として用意するのがポイント。
; もし、大文字を含む拡張子でも... filepath = "C:\\Program Files\\hsp30a\\readme.TXT" if getpath(filepath, 2 + 16) = ".txt" { mes "テキストファイルですー" } else { mes "テキストファイルじゃないですー" }
ちなみに、この小文字変換機能はファイルパスに限らず、普通の文字列でも利用できます。小文字と大文字の変換は、Win32 API関数を利用する方法もあります。(→ HSP3 あれこれ <文字列>)