c# - 如何检查给定的字符串在 Windows 下是否是合法/有效的文件名?

标签 c# windows file filesystems

我想在我的应用程序中包含批处理文件重命名功能。用户可以键入目标文件名模式,并且(在替换模式中的一些通配符之后)我需要检查它是否将成为 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/

相关文章:

c# - 如何访问 ApiController 中的 Response

c++ - 将消息格式化为不同的语言

python - 更改第一列中的数字

c# - 如何在 Windows 10 UWP 应用程序中播放 (MIDI) 声音?

c - 在 C 中扫描文件

mysql - 正确的PHP文件上传权限

c# - 添加时在窗体中查找UserControl

c# - Form.FormBorderStyle native 异常访问冲突

c# - 没有加载项 Express 的 outlook 2010 加载项构建自定义 WebViewPane

windows - 我的 Windows 客户如何向我发送崩溃日志?