0

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

在 index[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;
}

我将 更改List<FileInfo>List<List<FileInfo>>,因此是列表中的列表。

所以最后,如果我在硬盘上有 5 个目录,则列表将有 5 个索引,并且在每个索引中都会有一个包含目录文件的列表。

编辑**

这是 timer1 滴答事件:

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

我有 8 个图片框,我在 form1 构造函数中创建它们。在这种情况下,在计时器滴答事件中,我将图像分配给 pbs[0] 它的第一个图片框。

我需要做的是使用嵌套列表并将每个目录与里面的文件分配给一个图片框。所以嵌套列表中的第一个索引应该分配给第一个图片框 pbs[0] 然后索引 1 到 pbs[1] 等等。

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

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

4

1 回答 1

1

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

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

注意file_array将具有类型List<string>[](数组List<string>)。你的问题在我看来仍然不清楚timer1,但这应该可以解决你的问题(而不是你的整个问题)。您应该针对相关问题提出另一个问题。这个答案只是回答你提出的问题。

于 2013-11-10T01:43:07.527 回答