如何将目录中的最后一个文件添加到 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 有什么问题?
它是一个零绑定索引,因此它的长度为 -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();