【发布时间】:2013-12-02 03:42:59
【问题描述】:
我有一个简单的程序。它运行 .NET 4.5 并在 Visual Studio 2013 中构建。
D:\\MyDir 充满了.xlsx 文件,没有.xls 文件。当我在 Windows 8.1 x64 上运行该程序时,*.xls 的过滤器不返回任何结果。当我在 Windows 7 x86 上使用相同的 .NET 版本运行相同的程序时,*.xls 过滤器返回与*.xlsx 过滤器相同的结果。
两个系统上的测试文件夹肯定包含相同的数据。
我是否遗漏了什么,或者这是 .NET 和/或 Windows 中的错误?
各自的代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace throw_test
{
static class Program
{
static void Main()
{
int fileCount1 = Directory.GetFiles("D:\\MyDir", "*.xlsx").Length;
int fileCount2 = Directory.GetFiles("D:\\MyDir", "*.xls").Length;
Console.WriteLine("File Count 1: " + fileCount1);
Console.WriteLine("File Count 2: " + fileCount2);
Console.Read();
}
}
}
编辑 1
当我在 Windows 8.1 x64 中使用命令提示符导航到目录时:
-
dir *.xlsx按预期返回所有文件 -
dir *.xls返回“未找到文件”
Windows 7 在上述两个命令中返回预期的文件。
我的猜测是 .NET 在后台使用了这个命令,所以上面的结果?
【问题讨论】:
-
看起来像一个内置的 Windows 应用程序兼容性魔法。需要进一步调查。
-
@ogggre 它与 8.1 没有任何兼容性,它在 MSDN 中用于 GetFiles“... 给定两个文件,
file1.txt和file1.txtother,在一个目录中,一个搜索模式file?.txt只返回第一个文件,而file*.txt的搜索模式返回两个文件。“他的 8.1 机器运行不正确,结果应该已经显示出来了。 -
我找不到参考资料(我认为它可能是 Raymond Chen 的帖子),但 IIRC,这是旧版本 Windows 的“功能”,可以追溯到 dos 时代。
-
@ScottChamberlain 你是对的,在 Windows 8.1 64 位上尝试过,结果根据 MSDN,*.xls 过滤器返回与 *.xlsx 过滤器相同的结果。
-
嗯...我认为这是我正在寻找的文章:blogs.msdn.com/b/oldnewthing/archive/2007/12/17/6785519.aspx ...但我没有讨论那个特殊的怪癖。它谈论的是另一组奇怪的模式。
标签: c# .net visual-studio .net-4.5 visual-studio-2013