我想要一个函数,可能在路径函数中,可以检查文件名是否有效。通过有效,我的意思是字符串中存在的字符是否都是有效的(例如,没有?
、>
等)。但可悲的是,没有功能。浏览了网络,所以,我发现很少的技术,没有一个我喜欢,或者发现坚实。
- 使用正则表达式检查文件名的内容。
- 创建文件名,可能在系统的路径
%TEMP%
。如果创建失败,则文件名(可能)无效。否则,它是有效的(因此,删除该文件)。 - 编写一个函数,检查文件名中是否存在无效字符(例如
?:*>
)
函数的扩展形式是检查所有无效的名称(如AUX
,CON
等),但这不是问题(至少目前是这样)。
是否有任何我可能错过的记录/未记录的功能,它可以可靠地检查文件名(不是路径名)是否有效。
编辑: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;
}