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

Aja*_*jay 6 c c++ windows winapi filenames

我想要一个函数,可能在Path Functions中,它可以检查文件名是否有效。有效是指字符串中存在的字符是否全部有效(例如,?没有等)。>但遗憾的是,没有任何功能。浏览网络,我发现很少的技术,没有一个是我喜欢的,也没有找到可靠的。

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

函数的扩展形式是检查所有无效名称(例如AUXCON),但这不是问题(至少目前如此)。

是否有任何我可能错过的已记录/未记录的函数,它可以可靠地检查文件名(而不是路径名)是否有效。

Aja*_*jay 4

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


谢谢康纳的招待。对于其他读者,函数名称是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;
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,PathCleanupSpec 被列为已弃用。它可能不存在于未来版本的 Windows 中。 (4认同)