Windows上でワイルドカードを処理するAPIがPathMatchSpecである。
http://msdn.microsoft.com/en-us/library/bb773727(VS.85).aspx
しかしここに載っているサンプルがあまりにもセンスが悪い。
ということでテストコードを書いた。コードは後述。結果は以下。
1 2 3 4 5 6 7 8 9 10 |
"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 |
コードはこんな。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="synPreProc">#include </span><span class="synConstant"><stdio.h></span> <span class="synPreProc">#include </span><span class="synConstant"><Shlwapi.h></span> <span class="synPreProc">#pragma comment(lib, </span><span class="synConstant">"shlwapi.lib"</span><span class="synPreProc">)</span> <span class="synType">void</span> test(<span class="synType">const</span> <span class="synType">wchar_t</span>* path, <span class="synType">const</span> <span class="synType">wchar_t</span>* spec){ wprintf(<span class="synConstant">L"</span><span class="synSpecial">\"%s\"</span><span class="synConstant"> , </span><span class="synSpecial">\"%s\"</span><span class="synConstant"> => </span><span class="synSpecial">%s\n</span><span class="synConstant">"</span> , path, spec , ::PathMatchSpec(path, spec)?<span class="synConstant">L"true"</span>:<span class="synConstant">L"false"</span>); } <span class="synType">int</span> main(<span class="synType">const</span> <span class="synType">int</span> &){ test(<span class="synConstant">L"somepath.html"</span>, <span class="synConstant">L"somepath?html"</span>); test(<span class="synConstant">L"somepath.html"</span>, <span class="synConstant">L""</span>); test(<span class="synConstant">L"somepath.html"</span>, <span class="synConstant">NULL</span>); test(<span class="synConstant">L""</span>, <span class="synConstant">L"*"</span>); test(<span class="synConstant">L""</span>, <span class="synConstant">L"a"</span>); test(<span class="synConstant">L"somepath"</span>, <span class="synConstant">L"*."</span>); test(<span class="synConstant">L"somepath"</span>, <span class="synConstant">L"*.*"</span>); test(<span class="synConstant">L"hoge</span><span class="synSpecial">\\</span><span class="synConstant">fuga.html"</span>, <span class="synConstant">L"hoge*"</span>); test(<span class="synConstant">L"hoge</span><span class="synSpecial">\\</span><span class="synConstant">fuga.html"</span>, <span class="synConstant">L"hoge*html"</span>); test(<span class="synConstant">L"hoge</span><span class="synSpecial">\\</span><span class="synConstant">fuga.html"</span>, <span class="synConstant">L"hoge</span><span class="synSpecial">\\</span><span class="synConstant">*"</span>); } |