微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Windows中validation文件名是否有效?

一个Windows API函数,我可以传递一个string值,将返回一个值,指示文件名是否有效?

我需要validation一个文件名是有效的,我正在寻找一个简单的方法来做到这一点,而不需要重新发明轮子。 我正在直接C,但针对Win32 API。

如果没有这样的function,我怎么去写我自己的? Windows是否有一个通用algorithm或模式来确定文件名的有效性?

冒号/星号作为文件名分隔符?

Git拉无效的Windows文件

如何一次编辑多个文件名?

Git diff在path下用下划线文件失败

如何在Perl中编写一个* filename *包含utf8字符的文件

当某人提交非法文件名的文件时更新一个颠覆的工作副本

在Bash中提取文件名和扩展名

对于/ f循环进程文件名符号符号

如何安全地保存文件到磁盘没有Windows拒绝的风险呢?

如何创build具有非ASCII文件名的Windows本机兼容Zip文件

问题不是那么简单,因为它取决于你认为的“有效的文件名”。

与UNC路径一起使用的Windows API将让您愉快地创建大量在正常路径内被视为无效的名称,因为使用前缀\?告诉Windows API仅将路径传递到文件系统驱动程序执行任何检查; 文件系统本身通常并不关心它被用作文件名的地方,一旦他们知道某个字符串只是文件名(即路径/名称已经被完成),他们通常把它看作是一个不透明的序列字符。

另一方面,如果你想安全地玩,你应该根据你已经链接到Win32名称的MSDN文档指定的规则进行验证; 我不认为任何文件系统都可以有比这些文件命名更严格的规则。 另一方面,违反这些要求虽然可以得到内核本身的支持,但是往往给那些希望处理“传统”Win32路径的许多“正常”应用程序带来不好的麻烦。

但是,在我看来,如果你必须立即创建文件,那么你可以做的最好的验证是尝试实际创建/打开文件 ,让操作系统为你做这样的工作,并准备妥善地处理失败GetLastError应该返回ERROR_BAD_PATHNAME )。 这将检查您创建此类文件的任何其他限制,例如您的应用程序具有适当的权限,该路径不在只读介质上,…

如果出于某种原因,这是不可能的,你可能会喜欢shell函数PathCleanupSpec :提供所需的文件名和文件系统中的目录,它必须被创建,这个函数删除所有的无效字符不知道保留的DOS名称,他们没有在文档中列出),使路径“可能有效”,并通知您是否作出任何修改(所以你可以使用它也只用于验证)。

注意,这个函数标记为“可以在未来的Windows版本中修改或移除”,尽管微软的政策一般是“任何让公共头文件都会永久公开的东西”。

如果你正在检查文件名是否有效的意思是“文件可以这样命名? :

不,没有功能可以直接检查。 你将不得不写你自己的功能

但是,如果您知道什么是有效的文件名(有效的文件名现在包含以下任何一个: / : * ? " < > | ),那就不应该是这样的问题。

你也许可以用ctype.h某些函数来帮助你自己(用它们你可以检查一个特定的字符是否属于某个特定的字符类):

http://www.cplusplus.com/reference/clibrary/cctype/

这个函数给你一个文件名的无效字符列表。 由你来检查你的文件名不包含任何:

public static char[] Path.GetInvalidFileNameChars()

文档在这里

请注意,如果要验证目录名称,则应使用GetInvalidpathChars() 。

编辑:哦! 对不起,我以为你在使用.NET。 使用反射器,这是什么功能归结为:

'"','<','>','|','','x0001','x0002','x0003','x0004','x0005','x0006','a','b','t','n','v','f','r','x000e','x000f','x0010','x0011','x0012','x0013','x0014','x0015','x0016','x0017','x0018','x0019','x001a','x001b','x001c','x001d','x001e','x001f',':','*','?','\','/'

请注意,此外还有保留名称,如prn,con,com1,com2,...,lpt1,lpt2,...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐