【问题标题】:Get reserved file names in Windows获取 Windows 中的保留文件名
【发布时间】:2015-09-14 09:14:18
【问题描述】:

众所周知,您无法在 Windows 中创建名称为 con(例如 con.txt)的文件。 因此,在我的应用程序中,用户可以输入自定义文件名(不是通过 SaveFileDialog,只是输入名称的文本框,而不是完整路径),并且我想在用户输入无效文件名时显示错误消息。 有没有办法获取保留的 Windows 文件名的完整列表(conprnlpt 等)?

【问题讨论】:

  • 没有可以使用的运行时 API - WinAPI 和 .NET 中都没有。真可惜,因为文件名(和路径)限制是特定于平台的。您唯一的选择是尝试创建文件 - 但即使这样也不是万无一失的。
  • 通常,最好让用户决定他/她想给文件命名什么,然后继续尝试创建它,让 Win32 API 告诉你是否成功然后使用返回值来获取失败原因的信息。

标签: c# .net windows


【解决方案1】:

请勿使用以下保留名称作为文件名:

CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 和 LPT9。

还要避免这些名称紧跟扩展名;例如,不推荐使用 NUL.txt。

根据:https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx

【讨论】:

    【解决方案2】:

    看这里:Reserved file names

    Windows 操作系统中的保留文件名

    辅助 骗局 时钟$ 无 prn com1 com2 com3 com4 com5 com6 com7 com8 com9 lpt1 lpt2 lpt3 lpt4 lpt5 lpt6 lpt7 lpt8 lpt9

    【讨论】:

    • 是的,我可以对其进行硬编码,我试图找到一些“系统”方法来检查文件名
    • 似乎windows禁止使用类似于设备名称的文件名,但我没有找到对预定义列表的任何其他引用
    【解决方案3】:

    您可以在您的应用程序中使用GetFileType 并禁止FILE_TYPE_CHAR 的文件。这也适用于 con.txt 等保留名称。

    【讨论】:

    【解决方案4】:

    尝试在 %temp% 文件夹中创建该文件。如果成功,则该名称有效。如果你失败了,你可以向用户展示你的信息。

    另外,我会在创建之前检查已存在的具有该名称的文件。

    毕竟,别忘了删除它。

    【讨论】:

    • 文件是延迟创建的,所以我不能说文件是在用户按下确定后成功创建的
    • @Backs 创建成功就可以说创建成功了。
    【解决方案5】:

    CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 和 LPT9

    尽管您应该在 try catch 块下使用您的代码并捕获异常system.IO.DirectoryNotFoundException

    【讨论】:

      【解决方案6】:

      将文件名传递给GetFullPathName。如果结果以\\.\ 开头,则为设备名称。 Java uses this method.

      此方法仅适用于基于 NT 的 Windows。如果您仍然支持 Win9x,则必须调用 16 位 DOS 程序来遍历 DOS 设备链。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-30
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多