如何将目录中的最后一个文件添加到 List

本文关键字:添加 List string 文件 最后一个 | 更新日期: 2023-09-27 17:56:16

if (Form1.sf != null)
{
    radarDI = new DirectoryInfo(Form1.sf);
    radarFiles = radarDI.GetFiles("*.png");
    for (int i = radarFiles.Length; i > 0; i--)
    {
        myGifListRadar.Add(radarFiles[i].Name);
    }
}

雷达文件包含 224 个文件。我想将硬盘上文件末尾的最后 5 个或任何最后数量的文件添加到myGifListRadar List<string>

如果我为int I = 0 ; I < test.Length; I++做,它将添加:

00001.png

00002.png

我希望它从最后添加:

00224.png

00223.png

等等...所以我试图将 FOR 更改为现在的样子,但我的异常超出界限:

索引超出数组的范围

FOR 有什么问题?

如何将目录中的最后一个文件添加到 List<string>

它是一个零绑定索引,因此它的长度为 -1,您还需要大于或等于倒计时到零,否则您将错过数组中的第一个元素。

for (int i = radarFiles.Length - 1; i >= 0; i--)
{
}

尝试

for (int i = radarFiles.Length - 1; i >= 0; i--)

数组和其他集合从零开始索引,因此您必须从长度中减去 1

更改以下内容:

for (int i = radarFiles.Length; i > 0; i--)

对此:

for (int i = radarFiles.Length-1; i >= 0; i--)

你刚从列表的末尾开始。 此外,您需要使用>= 而不仅仅是>否则如果目录足够小,您将丢失文件。

您可以使用

Enumerable.OrderByDescending + Enumerable.Take

var last5Files = Directory.EnumerateFiles(directoryPath, "*.png")
    .Select(p => new { Path = p, FileName = Path.GetFileName(p) })
    .Select(x => new { x.FileName, Number = x.FileName.TryGetInt() })
    .Where(x => x.Number.HasValue)
    .OrderByDescending(x => x.Number.Value)
    .Select(x => x.FileName)
    .Take(5);
foreach (string fn in last5Files)
    myGifListRadar.Add(fn);

这是我用来从您的文件名获取int?的扩展方法:

public static class NumericExtensions
{
    public static int? TryGetInt(this string item)
    {
        int i;
        bool success = int.TryParse(item, out i);
        return success ? (int?)i : (int?)null;
    }
}

(假设您只需要具有数字文件名的 PNG 文件)

由于您的文件具有该格式的名称,因此您可以使用以下内容:

var fileList = Directory.GetFiles(path)
                  .OrderByDescending(n => Path.GetFileName(n))
                  .Take(5)
                  .ToList();