Windows文件名 - 如何检查文件名是否有效?

时间:2014-11-14 11:07:17

标签: c++ c windows winapi filenames

我想要一个函数,可能在Path Functions之间,检查文件名是否有效。如果有效,我的意思是如果字符串中存在的字符都是有效的(例如,没有?>等。但遗憾的是,没有任何功能。通过网络浏览,我发现了一些技术,我不喜欢它们,或者找不到它们。

  • 使用正则表达式检查文件名的内容。
  • 创建文件名,可能在系统的%TEMP%路径中。如果创建失败,则文件名(可能)无效。否则,它是有效的(因此,删除文件)。
  • 编写一个函数,检查文件名中是否存在无效字符(例如?:*>

扩展形式的功能是检查所有无效名称(例如AUXCON等),但这不是问题(至少目前为止)。

是否有任何记录/未记录的功能,我可能错过了,这可以可靠地检查文件名(路径名)是否有效。

1 个答案:

答案 0 :(得分:2)

编辑:PathCleanupSpec功能现已弃用,不再受支持。有关详细信息,请参阅链接页末尾的Requirements部分。

感谢Connor的功能。对于其他读者,函数名称为PathCleanupSpec。使用我已实现以下内容:

bool IsLegalFileName(LPCWSTR filename)
{
    WCHAR valid_invalid[MAX_PATH];
    wcscpy_s(valid_invalid, filename);

    int result = PathCleanupSpec(nullptr, valid_invalid);

    // If return value is non-zero, or if 'valid_invalid' 
    // is modified, file-name is assumed invalid
    return result == 0 && wcsicmp(valid_invalid, filename)==0;
}