< 入力可能なコンボボックスにツールチップを設定する | PathAddExtension の挙動 >

September 28, 2005

ファイル名に使用できない文字を判断する

Windows Xp になって、ファイル名に使用できない文字を入力したときのメッセージが修正されているのに気がついた。

pathgetchartype1.png

以前は、カンマとセミコロンが、実際にはファイル名に使用できるにもかかわらず、使用できない文字として表示されていたのは有名な話だ。

pathgetchartype2.png

ところで、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

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?