ファイル名に使用できない文字を判断する
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
コメント