繁体   English   中英

我该如何添加到列表中 <string> 目录中的最后一个文件?

[英]How can i add to the List<string> the last file from the directory?

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);
    }
}

radarFiles包含224个文件。 我想在myGifListRadar List<string>中添加最后5个或硬盘上文件末尾的最后一个文件数。

如果我正在做int I = 0 ; I < test.Length; I++ int I = 0 ; I < test.Length; I++ int I = 0 ; I < test.Length; I++它会添加:

00001.png

00002.png

我希望它从最后添加:

00224.png

00223.png

等等......所以我试图将FOR更改为现在,但我正在异常超出范围:

指数数组的边界之外

FOR有什么不对吗?

它是一个零边界索引,因此它的长度为-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?的扩展方法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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM