ファイル名に使用できない文字を判断する
Windows Xp になって、ファイル名に使用できない文字を入力したときのメッセージが修正されているのに気がついた。
以前は、カンマとセミコロンが、実際にはファイル名に使用できるにもかかわらず、使用できない文字として表示されていたのは有名な話だ。
ところで、shlwapi.dll には、ファイル名に使用できる文字かどうかを判断する関数がある。PathGetCharType だ。
この関数に、例の文字列群を渡してみる。
#include <windows.h> #include <tchar.h> #include <stdio.h> #include <shlwapi.h> int main (int argc, char **argv) { TCHAR szChars [] = _T ("\\/:,;*?\"<>|"); LPCTSTR pChar = szChars; UINT uRet = GCT_INVALID; while (*pChar) { uRet = PathGetCharType (*pChar); _ftprintf (stdout, _T ("'%c' は\n"), *pChar); if (GCT_LFNCHAR & uRet) { _ftprintf (stdout, _T ("\t長いファイル名に使用できます\n")); } if (GCT_SHORTCHAR & uRet) { _ftprintf (stdout, _T ("\t短いファイル名に使用できます\n")); } if (GCT_WILD & uRet) { _ftprintf (stdout, _T ("\tワイルドカードです\n")); } if (GCT_SEPARATOR & uRet) { _ftprintf (stdout, _T ("\t区切り文字です\n")); } if (GCT_INVALID == uRet) { _ftprintf (stdout, _T ("\t不正な文字です\n")); } pChar ++; } return 0; }
'\' は 区切り文字です '/' は 不正な文字です ':' は 区切り文字です ',' は 長いファイル名に使用できます ';' は 長いファイル名に使用できます '*' は ワイルドカードです '?' は ワイルドカードです '"' は 不正な文字です '<' は 不正な文字です '>' は 不正な文字です '|' は 不正な文字です Press any key to continue
関数の戻り値はビットマスクで、たとえば 'a' なんかだと
'a' は 長いファイル名に使用できます 短いファイル名に使用できます
となるので、カンマとセミコロンは8.3形式では使用できないことが分かる。例のメッセージは Windows 3.1 時代くらいに組み込んだメッセージをずっと変更してなかったとか?笑
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/1083
コメント