PathMatchSpecの挙動
Windows上でワイルドカードを処理するAPIがPathMatchSpecである。
http://msdn.microsoft.com/en-us/library/bb773727(VS.85).aspx
しかしここに載っているサンプルがあまりにもセンスが悪い。
ということでテストコードを書いた。コードは後述。結果は以下。
"somepath.html" , "somepath?html" => true "somepath.html" , "" => true "somepath.html" , "(null)" => false "" , "*" => true "" , "a" => false "somepath" , "*." => false "somepath" , "*.*" => true "hoge\fuga.html" , "hoge*" => true "hoge\fuga.html" , "hoge*html" => true "hoge\fuga.html" , "hoge\*" => true
コードはこんな。
#include <stdio.h> #include <Shlwapi.h> #pragma comment(lib, "shlwapi.lib") void test(const wchar_t* path, const wchar_t* spec){ wprintf(L"\"%s\" , \"%s\" => %s\n" , path, spec , ::PathMatchSpec(path, spec)?L"true":L"false"); } int main(const int &){ test(L"somepath.html", L"somepath?html"); test(L"somepath.html", L""); test(L"somepath.html", NULL); test(L"", L"*"); test(L"", L"a"); test(L"somepath", L"*."); test(L"somepath", L"*.*"); test(L"hoge\\fuga.html", L"hoge*"); test(L"hoge\\fuga.html", L"hoge*html"); test(L"hoge\\fuga.html", L"hoge\\*"); }