我想在我的应用程序中包含批处理文件重命名功能。用户可以键入目标文件名模式,并且(在替换模式中的一些通配符之后)我需要检查它是否将成为 Windows 下的合法文件名。我尝试使用像 [a-zA-Z0-9_]+
这样的正则表达式,但它不包含来自不同语言的许多国家特定字符(例如变音符号等)。进行此类检查的最佳方法是什么?
最佳答案
来自 MSDN's "Naming a File or Directory,"以下是 Windows 下合法文件名的一般约定:
您可以使用当前代码页(127 以上的 Unicode/ANSI)中的任何字符,除了:
-
<
>
:
"
/
\
|
?
*
- 整数表示为0-31(小于ASCII空间)的字符
- 目标文件系统不允许的任何其他字符(例如,尾随句点或空格)
- 任何 DOS 名称:CON、PRN、AUX、NUL、COM0、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT0、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6 , LPT7, LPT8, LPT9(并避免使用 AUX.txt 等)
- 文件名全是句号
一些可选的检查:
- 文件路径(包括文件名)不得超过 260 个字符(不使用
\?\
前缀) - 使用
\?\
时超过 32,000 个字符的 Unicode 文件路径(包括文件名) (请注意,前缀可能会扩展目录组件并导致其溢出 32,000 个限制)
关于c# - 如何检查给定的字符串在 Windows 下是否是合法/有效的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62771/