C# 如何创建嵌套的FileInfo列表?

C# 如何创建嵌套的FileInfo列表?,c#,winforms,C#,Winforms,我想做的是获取所有目录和每个目录中的文件,并将其添加到列表中。列表应如下所示,例如: 在索引[0]{[fileinfo列表和此处的所有文件]} 因此,在每个索引中,我都会有一个目录,并且在这个目录的所有文件中 我试着做: private void getfiles() { List<List<FileInfo>> fileList = new List<List<FileInfo>>(); for (int i = 0; i <

我想做的是获取所有目录和每个目录中的文件,并将其添加到列表中。列表应如下所示,例如:

在索引[0]{[fileinfo列表和此处的所有文件]}

因此,在每个索引中,我都会有一个目录,并且在这个目录的所有文件中

我试着做:

private void getfiles()
{
    List<List<FileInfo>> fileList = new List<List<FileInfo>>();
    for (int i = 0; i < BackgroundWorkerConfiguration.urlsDirectories.Count; i++)
    {
        System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(BackgroundWorkerConfiguration.urlsDirectories[i]);
        fileList.AddRange(di.GetFiles("*.*", System.IO.SearchOption.AllDirectories).Where(x => x.Length > 0));
    }
    file_array = fileList.OrderBy(x => x.CreationTime).Select(x => x.FullName).ToArray();
    //file_array = fileList.OrderByDescending(x => x.CreationTime).Select(x => x.FullName).ToArray();
    timer1.Enabled = true;
}
private void getfiles()
{
List fileList=新列表();
对于(int i=0;ix.Length>0));
}
file_array=fileList.OrderBy(x=>x.CreationTime);
//file_array=fileList.OrderByDescending(x=>x.CreationTime)。选择(x=>x.FullName.ToArray();
timer1.Enabled=true;
}
我将
列表
更改为
列表
,因此列表中有一个列表

最后,如果我在硬盘上有5个目录,列表将有5个索引,每个索引中都有一个目录文件列表

编辑**

这是计时器1滴答声事件:

private void timer1_Tick(object sender, EventArgs e)
{
    try
    {     
        //this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        for (int i = 0; i < file_array.Length; i++)
        {

        }
        if (leave == true)
        {
            pb.Load(file_array[file_indxs]);
        }
        else
        {
            pbs[0].Load(file_array[file_indxs]);
        }
        file_indxs = file_indxs + 1;
        if (file_indxs >= file_array.Length)
        {
            file_indxs = 0;
        }
    }
    catch
    {
        timer1.Enabled = false;
    }
}
private void timer1\u勾选(对象发送方,事件参数e)
{
尝试
{     
//this.pictureBox1.SizeMode=PictureBoxSizeMode.StretchImage;
对于(int i=0;i=file_array.Length)
{
文件indxs=0;
}
}
抓住
{
timer1.Enabled=false;
}
}
我在form1构造函数中创建了8个图片框。 在这种情况下,在计时器滴答声事件中,我将图像分配给pbs[0],这是第一个pictureBox

我需要做的是使用嵌套列表,并将每个目录和其中的文件分配给pictureBox。 因此,嵌套列表中的第一个索引文件应分配给第一个pictureBox pbs[0],然后将索引1分配给pbs[1],依此类推

因此,如果嵌套列表有5个索引,则应将其分配给5个pictureBoxes


而是将所有图像分配给pbs[0],这就是我创建嵌套列表的原因。

您需要按目录对所有文件进行分组。有一些方法可以做到这一点,例如,每次准备枚举目录的文件时,只需创建一个新的
列表
,枚举文件并将其添加到新列表中,每个新创建的列表都将添加到根
列表
(如果需要,可以将其转换为数组)。但是,我希望使用这种方法,它将尽可能少地修改您的代码:

private void getfiles() {
  List<FileInfo> fileList = new List<FileInfo>();
  for (int i = 0; i < BackgroundWorkerConfiguration.urlsDirectories.Count; i++) {
    System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(BackgroundWorkerConfiguration.urlsDirectories[i]);
    fileList.AddRange(di.GetFiles("*.*", System.IO.SearchOption.AllDirectories)
                        .Where(x => x.Length > 0));
  }
  file_array = fileList.OrderBy(x => x.CreationTime)
                       .GroupBy(x => x.DirectoryName)
                       .Select(g => g.Select(x => x.FullName).ToList())
                       .ToArray();
  timer1.Enabled = true;
}
private void getfiles(){
List fileList=新列表();
对于(int i=0;ix.长度>0));
}
file\u array=fileList.OrderBy(x=>x.CreationTime)
.GroupBy(x=>x.DirectoryName)
.Select(g=>g.Select(x=>x.FullName).ToList())
.ToArray();
timer1.Enabled=true;
}

注意
文件\u数组
的类型为
列表[]
(一个
列表
的数组)。在
timer1
的参与下,我似乎仍然不清楚您的问题,但这应该可以解决您的问题(而不是您的整个问题)。你应该就相关问题再问一个问题。这个答案正好回答了你提出的问题。

问题到底是什么?问题是如何使用FileInfo。很久以前我用绳子做过一次。但是因为我想对文件进行排序,所以我不确定在这种情况下如何进行排序。我把文件信息列表改成了嵌套列表,但我不知道如何使用它。不知怎的,还是很难说到底是什么问题和你的意图。有很多信息,但毫无疑问。我想如果你能把你的实际问题缩小到1-2句话和一个(更具体的)问题会有所帮助…国王国王当我现在尝试你的新答案时,我在fileList.AddRange:error 1行上遇到了一个错误,这是“System.Collections.Generic.List.AddRange(System.Collections.Generic.IEnumerable)”的最佳重载方法匹配'在此行有一些无效参数和另一个错误:错误2参数1:无法从'System.Collections.Generic.IEnumerable'转换为'System.Collections.Generic.IEnumerable'King'并且在以下行有错误:file\u array=fileList.OrderBy(x=>x.CreationTime)在CreationTime上:错误3“System.Collections.Generic.List”不包含“CreationTime”的定义,并且找不到接受“System.Collections.Generic.List”类型的第一个参数的扩展方法“CreationTime”(是否缺少using指令或程序集引用?)@DoronMuzar updated,我复制并粘贴了您的代码,但没有注意到
fileList
的声明,它应该是
List