You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Directory.EnumerateFiles方法如何选取第i个文件?

解决EnumerateFiles无法通过索引获取第i个文件的问题

Directory.EnumerateFiles返回的是IEnumerable<string>类型,这是一个延迟枚举的序列而非集合类型,因此无法直接通过[索引]的方式访问元素。要获取第i个文件,可通过以下两种方式实现:

方法1:使用LINQ的ElementAt方法

这种方式无需加载所有文件路径到内存,仅枚举到目标位置就停止,性能更高效:

using System.Linq; // 需引入LINQ命名空间

var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt");
// 获取第2个文件(索引从0开始,对应索引1)
string secondFile = txtFiles.ElementAt(1);

// 执行移动操作
string fileName = secondFile.Substring(sourceDirectory.Length + 1);
Directory.Move(secondFile, Path.Combine(archiveDirectory, fileName));

如果不确定序列中是否存在足够数量的文件,可改用ElementAtOrDefault,不存在时返回null:

string secondFile = txtFiles.ElementAtOrDefault(1);
if (secondFile != null)
{
    // 执行操作
}

方法2:转换为List/数组后使用索引

若需要多次访问不同索引的文件,可先将序列转换为List<string>或数组,后续直接通过索引访问:

var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt").ToList();
// 或转换为数组:var txtFiles = Directory.EnumerateFiles(...).ToArray();

// 先判断是否存在第2个文件,避免索引越界
if (txtFiles.Count > 1)
{
    string secondFile = txtFiles[1];
    string fileName = secondFile.Substring(sourceDirectory.Length + 1);
    Directory.Move(secondFile, Path.Combine(archiveDirectory, fileName));
}

注意事项

  • 索引从0开始,第N个文件对应索引N-1;
  • 转换为List/数组会一次性加载所有文件路径到内存,若目标目录文件数量极大,可能造成内存占用过高,此时优先选择ElementAt方法。

内容的提问来源于stack exchange,提问作者vuict

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:45:10