gpt4 book ai didi

c# - Directory.GetFiles - 不同的输出取决于操作系统

转载 作者:太空狗 更新时间:2023-10-29 17:46:31 26 4
gpt4 key购买 nike

我有一个简单的程序。它运行 .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 在幕后使用了这个命令,因此出现了上述结果?

最佳答案

我在我的机器上尝试使用 *.xls 并返回所有 xlsx 文件,正如 MDSN 所描述的那样.

我有 Visual Studio 2013,在 .NET 4.5 上构建为调试/发布任何 CPU,并在 Win 8.1 X64 上针对 NTFS/FAT32 分区运行,应该涵盖您的环境。你还有什么特别的吗?

编辑

根据这个question ,您可能通过运行以下命令在 Win 8.1 系统上禁用了 8.3 命名:

fsutil behavior set disable8dot3

可以通过运行查询当前状态

fsutil behavior query disable8dot3 <VolumePath>

在我的机器上它返回默认设置,如:

The volume state is: 0 (8dot3 name creation is enabled).
The registry state is: 2 (Per volume setting - the default).

Based on the above two settings, 8dot3 name creation is enabled on c:

关于c# - Directory.GetFiles - 不同的输出取决于操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20320447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com