gpt4 book ai didi

c# - 以特定顺序遍历文件夹中的文件?

转载 作者:太空狗 更新时间:2023-10-30 01:21:37 24 4
gpt4 key购买 nike

我是 C# 编程的新手,所以如果我的问题微不足道,我深表歉意。我正在运行一些 c# 代码,我需要在其中迭代文件夹中的一些文件并使用:

foreach (string f in Directory.GetFiles(@"C:\temp\GeneralStats"))
{

但是,我希望根据文件名以特定顺序读取这些文件。我的文件名采用以下格式。

generalstats_2012_11_1.csvgeneralstats_2012_11_2.csvgeneralstats_2012_11_3.csv.....

当我的代码读取文件时,它以 generalstats_2012_11_1.csv 开头,但随后直接跳转到 generalstats_2012_11_10.csv,而不是 generalstats_2012_11_2.csv。

我曾尝试在网上搜索答案,但一直找不到任何答案。我当然根据特定文件夹中的日期(名称)对文件进行了排序,但代码根本不承认这一点。任何人都可以帮助我 - 是否有我错过的 c# 中的一些订单功能?

最佳答案

你可以使用这个:

        var paths = Directory.GetFiles(@"C:\temp\GeneralStats")
.OrderBy(path =>
Convert.ToInt32(path.Split('_', '.')[1]) * 10000 +
Convert.ToInt32(path.Split('_', '.')[2]) * 100 +
Convert.ToInt32(path.Split('_', '.')[3]));

foreach (string path in paths)
{
}

这从文件名中获取日期部分并从中创建一个整数,例如 2012_11_10 来自文件名的整数是 2012110,2012_11_1 是 20121101 等。这些数字用于排序。

上述方法的另一种变体是:

        var paths = Directory.GetFiles(@"C:\temp\GeneralStats")
.OrderBy(path =>
Convert.ToInt32(
String.Concat(
path.Split('_', '.')
.Skip(1)
.Take(3)
.Select(num => num.PadLeft(2, '0'))
.ToArray())
)
);

它还解析文件名中的数字并创建用于排序的整数。

您可以使用 Directory.EnumerateFiles 而不是 Directory.GetFiles 方法(但这仅在 .NET 4 及更高版本中可用)。

关于c# - 以特定顺序遍历文件夹中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084316/

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