![](/img/trans.png)
[英]How can i get from a directory string only the last subdirectory name and the file name?
[英]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.