- 14 名前:前スレ994 mailto:sage [2007/07/20(金) 01:26:03 ]
- OK、記憶のままに書いてみる。間違ってたらすまん。
・基本的なお話 APIのワイルドカードマッチングはDOS時代の名残。 従って、ファイル名本体+"."+拡張子という構成の影響を受けている。 どういうことかというと"."は特殊な文字で、それが記録されるのではなく ファイル名本体と拡張子を区切る記号として働く。 逆に、拡張子を持たないファイルは暗黙に空の拡張子を持っていると解釈される。 ・"?"のお話 "?"は当然空白文字にもマッチする。注意すべきは、ファイル名本体(或いは拡張子)は 無限に空白文字が後続するものとして扱われること。 従って、"a???"は"a"にも"ab"にも"abcd"にもマッチする。 #この場合、"a??d"ならば当然に"abcd"にしかマッチしない。 また、ファイル名本体と拡張子を別々に扱うので"."にはマッチしない。 例えば、"a?b"は"a b"にはマッチするが"a.b"にはマッチしない。 ・"*"のお話 "*"は前項の"?"とは違い、ファイル名本体と拡張子混在した形で働く。従って、"a*b"は"a.b"にもマッチする。 また、"*."は(前述のように空の拡張子を持つと解釈される)"abc"にはマッチするが"abc.d"にはマッチしない。 ・ロングネームとショートネームの問題 ショートネームで表すことができないファイルはロングネームも記録され、 ショートネームには記号化した形で記録される。これが困ったことに"?"にも"*"にもマッチする。 つまり、ショートネームは8文字+3文字が上限なので"????????.???"は全てのファイルにマッチしてしまう。 ショートネームの生成ルールは不可思議なので割愛。ショートネームの拡張子の振る舞いの例を挙げておく。 ※"a.b.c.d"→拡張子は"d" ※"a.abcd"→拡張子は"abc" ※"a b"→拡張子なし ※"a.b"→ロングネームは生成されずそのままショートネームのみ ※".abc"→拡張子なし こんな…おっと、バイト数制限のためこの辺で。
|

|