我想要做的是将所有目录和每个目录放在里面并将其添加到List中。列表应该如下所示:
在索引[0] {[文件信息列表和此处的所有文件]}
中所以在每个索引中我都会有目录并且在这个目录的所有文件中。
我试着这样做:
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个目录,那么List将有5个索引,并且在每个索引中都会有一个包含该目录文件的List。
编辑**
这是timer1 tick事件:
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个pictureBox我在form1构造函数中创建它们。 在这种情况下,在计时器刻度事件中,我将图像分配给pbs [0],即第一个图片框。
我需要做的是使用嵌套列表并将每个目录中的文件分配给pictureBox。 因此,嵌套列表中的第一个索引应该将文件分配给第一个pictureBox pbs [0],然后将索引1分配给pbs [1],依此类推。
因此,如果嵌套列表有5个索引,则应将其分配给5个pictureBox。
而是将所有图像分配给pbs [0],这就是我做嵌套列表的原因。
答案 0 :(得分:1)
您需要按目录对所有文件进行分组。有一些方法可以这样做,例如每次准备枚举目录的文件时,只需创建一个新的List<FileInfo>
,枚举文件并将它们添加到新列表中,每个新创建的列表都将添加到root 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
的参与下,我的问题看起来仍然不清楚,但这应该可以解决您的问题(不是您的整个问题)。你应该问另一个相关问题。这个答案只是回答了你提出的问题。