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

2024-04-03

我想在我的应用程序中包含批处理文件重命名功能。用户可以键入目标文件名模式(在替换模式中的一些通配符后),我需要检查它是否是 Windows 下的合法文件名。我尝试使用正则表达式,例如[a-zA-Z0-9_]+但它不包括来自各种语言的许多国家特定字符(例如元音变音等)。进行此类检查的最佳方法是什么?


From MSDN 的“命名文件或目录” http://msdn.microsoft.com/en-us/library/aa365247.aspx以下是 Windows 下合法文件名的一般约定:

您可以使用当前代码页中的任何字符(Unicode/ANSI 127 以上),除了:

  • < > : " / \ | ? *
  • 整数表示为 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 个字符(不使用\?\ prefix)
  • 使用时超过 32,000 个字符的 Unicode 文件路径(包括文件名)\?\(请注意,前缀可能会扩展目录组件并导致其溢出 32,000 个限制)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查给定字符串是否是 Windows 下合法/有效的文件名? 的相关文章

随机推荐

  • 如何定期刷新Excel中的数据库数据?

    在我正在制作的 Excel 电子表格 VBA 脚本中 我需要从数据库调用数据 并每 5 分钟刷新一次值 该程序从按下按钮开始 并且应该连续运行 直到用户中断执行 我目前不确定如何让 Excel VBA 等待 5 分钟而不暂停电子表格 并且理
  • 布尔表达式+短路

    我想用布尔表达式 短路求值打印一条消息 我不允许使用 if while for 但在 C Lion 中一切正常 但在其他编译器中它说 hw2q1 c In function decision hw2q1 c 38 55 error valu
  • C 8位16位32位编译器之间的区别[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Log4j RollingFileAppender 未将映射器和减速器日志添加到文件中

    我们希望将应用程序日志打印到本地节点上的文件中 我们使用 Log4j 的 RollingFileAppender Our log4j properties文件如下 ODS LOG DIR var log appLogs ODS LOG IN
  • 如何在Android资源中使用unicode?

    我想用this http www fileformat info info unicode char 1f4e1 index htm我的资源文件中的 unicode 字符 但无论我做什么 我都会以 dalvikvm 崩溃结束 使用 Andr
  • 在 Java 中读取 CDATA XML

    我正在尝试解析 XML 中的 CDATA tpyes 代码运行良好 它将在控制台中打印 Links 大约 50 次 因为这就是我拥有的链接数量 但链接不会出现 它只是一个空白的控制台空间 我可能会错过什么 package Parse imp
  • 获取用户最后拍摄的照片

    嘿 我想获取用户通过任何相机应用程序拍摄的最后一张照片 我不知道该怎么做 谁能帮我 此外 我想将该图像作为电子邮件或彩信的附件发送 thanks Find the last picture String projection new Str
  • 在 sails.js 中,如何访问控制器外部的会话变量?

    在控制器中 这很容易 访问会话变量很简单 req session x 1 但是 我如何访问该外部控制器 喜欢服役吗 module exports test function No req session here 您可以创建一个将注册的主控
  • 如何在 IntelliJ 中更改 Maven 的 Java 版本?

    我对 Maven 和 IntelliJ IDEA 都很陌生 我有一个用 Java 8 编写的 Maven 项目 每当我尝试构建它 Maven 项目窗口 gt 生命周期 gt 编译 gt 运行 Maven Build 时 我都会收到一系列编译
  • 保留字行为[重复]

    这个问题在这里已经有答案了 在创建一个基于计数器的小型游戏时 我有一个像这样的数组 var status day dusk night dawn 如果我尝试访问数组的第一个索引 我会得到 console log status 0 yield
  • 对拳击感到困惑。将 -1 转换为 Int64 会抛出 InvalidCastException

    好吧 我一定忽略了一些非常简单的事情 但我迷路了 鉴于这种 object val 1 var foo Int32 val var bar Int64 val 转换为 Int64 会引发 InvalidCastException 我知道这与拳
  • 客户端与服务器术语

    我总是把这两个术语混淆 如何判断哪一方是服务器 哪一方是客户端 是根据发送还是接收数据来决定的 假设连接是单向的 谢谢你 In TCP https en wikipedia org wiki Transmission Control Pro
  • 如何控制png的字体大小?

    我正在尝试为手稿制作图表 该手稿应该用 MS Word 编写 它不接受 pdf 格式的图表 该期刊要求在 Word 文件中嵌入图形的初稿 这些图的分辨率至少为 300 dpi 宽度为 169 毫米或 81 毫米 两列 一列 我注意到 当我将
  • SQL Server 2012。异常:尝试读取或写入受保护的内存(MS.VS.OLE.Interop)

    我更像是 SQL Server 2012 的最终用户 当我右键单击表名称并选择 编辑前 200 行 菜单项时 我收到这条消息 Exception has been thrown by the target of an invocation
  • 发送电子邮件无需密码

    我正在开发一个安卓应用程序 在我的 Android 应用程序中 我有反馈表 我将用户的电子邮件 ID 作为输入 我希望当用户单击提交按钮时应该发送电子邮件 我不希望该用户为此添加他 她的密码 我已经检查了默认方法Intent以及下面链接中的
  • Android 锁密码组合

    我刚刚从我的同事那里听到了这个有趣的问题 我现在正在尝试 但同时我想我可以在这里分享 Android 主屏幕上显示的密码网格中 可能有多少个有效密码 密码最小长度 4 最大 9 如果我错了请纠正我 Summary 4 到 9 个独特数字的完
  • Delphi 7 中的 Soap 信封标头不包括 utf-8 编码。我该如何修改它?

    我在接收来自 Delphi 7 客户端的无效非 ascii 字符时遇到问题 该客户端将 utf 8 编码的 XML 发送到字符串参数中的 C WebService 使用 Net 客户端 可以毫无问题地接收字符 我尝试了很多方法 但似乎都不起
  • 从 Git 远程存储库中删除 .pyc 文件

    不小心 我已将 pyc 文件推送到主存储库 现在我想删除它们 但我做不到 有没有办法直接从 Bitbucket 网站上删除它们 Remove pyc文件使用git rm pyc 如果这不起作用 请使用git rm f pyc Commit
  • 有没有办法避免将 Perl 版本号放入非标准位置的 Perl 模块的“use lib”行?

    我正在尝试将一些 Perl 模块安装到非标准位置 我们称之为 non standard location 我用了 perl Makefile PL PREFIX non standard location make make install
  • 如何检查给定字符串是否是 Windows 下合法/有效的文件名?

    我想在我的应用程序中包含批处理文件重命名功能 用户可以键入目标文件名模式 在替换模式中的一些通配符后 我需要检查它是否是 Windows 下的合法文件名 我尝试使用正则表达式 例如 a zA Z0 9 但它不包括来自各种语言的许多国家特定字