我最近碰到了Microsoft的一个奇怪功能:

假设我们的文件夹c:\tmp123包含3个文件-1.txt2.txtx3.txtxt
a)调用Directory.GetFiles(@"C:\tmp123", "*.txt")会在3个返回的项中产生。
b)调用Directory.GetFiles(@"C:\tmp123", "*.txtx")会在1个返回的项目中产生。

根据Microsoft的介绍,这是预期的行为(请参阅MSDN中的Note)。

我的问题是:

  • Microsoft为什么决定拥有如此奇怪的功能?
  • 我该如何克服这个问题?
    即我如何有一个仅返回*.txt扩展名而不返回*.txtx*.txtstarngefunctionality等的搜索模式?
  • 最佳答案

    这样做的原因是向后兼容。

    Windows最初是作为MSDOS之上的图形界面构建的,该文件的名称只有8个字符,扩展名最多3个字符。 MSDOS文件系统的扩展允许Windows使用更长的文件名和扩展名,但在MSDOS中它们仍将显示为8.3文件名。

    由于Windows上的命令提示符是MSDOS中旧命令解释器的演变,这意味着保留了一些“过时的”行为(例如3个字母的搜索模式),因此在“旧时代”或“旧计时器”中构建的应用程序和脚本不会破裂。

    (另一个示例是大多数Windows文件系统都不区分大小写的事实,是的,您猜到了,因为MSDOS没有 shell )

    10-04 10:38