1 使用C++标准库过滤Windows文件名中的非法字符

在windows系统上有一些字符识别是不能存在于文件名之中的,不然会导致创建文件失败,所以写了一个过滤函数过滤文件名中的非法字符:
代码示例:

template <typename T>
bool MatchInvalidCharPredicate(const T& t)
{
    unsigned char t1 = (unsigned char)t;
    if (t1 <= 0x1F
        || t1 == 0x7F
        || t1 == 0x5C // \
        || t1 == 0x2F // /
        || t1 == 0x3A // :
        || t1 == 0x2A // *
        || t1 == 0x3F // ?
        || t1 == 0x22 // "
        || t1 == 0x3C // <
       || t1 == 0x3E // >
        || t1 == 0x7C // |
        )
    {
        return true;
    }
    return false;
}

template<typename C, class T>
void FilterInvalidFileNameChar(T& c)
{
    std::replace_if(c.begin(), c.end(), MatchInvalidCharPredicate<C>, L'_');
}

void TestFilterInvalidFileNameChar()
{
    std::wstring wss(L"/as中国fasdfas?asdfas*dfa.txt");
    FilterInvalidFileNameChar<wchar_t>(wss);
    std::cout << "======TestFilterInvalidFileNameChar=================" << std::endl;
    std::wcout << Unicode2Ansi(wss.c_str()) << std::endl;
}