2
          for (int i = 0; i < BackgroundWorkerConfiguration.urlsDirectories.Count; i++)
            {
                 file_array =Directory.GetFiles(BackgroundWorkerConfiguration.urlsDirectories[i]);
            }

            DateTime[] creationTimes8 = new DateTime[file_array.Length];


              for (int i = 0; i < file_array.Length; i++)
                creationTimes8[i] = new FileInfo(file_array[i]).CreationTime;
            Array.Sort(creationTimes8, file_array);
            file_indxs = 0;
            file_indxs = file_array.Length - 1;
            timer1.Enabled = true;

urlsDirectories 包含 5 个目录,其中每个索引都有一个目录。在每个目录中都有一些文件。我有一个字符串数组 file_array。我得到的数组,循环末尾的 file_array 只包含最后一个目录文件,而不是所有文件。我需要该特定目录中的所有文件。

完成后,我需要检查文件大小是否大于 0,如果满足条件则继续。

编辑** 这是 timer1 滴答事件:

private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {     
                //this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                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 < 0)
                {
                    file_indxs = file_array.Length - 1;
                }
            }
            catch
            {
                timer1.Enabled = false;
            }
        }
4

2 回答 2

2

您可以使用以下代码将所有目录的大小大于 0 的文件放入 a List

List<System.IO.FileInfo> fileList = new List<System.IO.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));
}

现在fileList将包含FileInfo您可以在代码中进一步使用的列表。

请注意,我曾经System.IO.SearchOption.AllDirectories也搜索过所有子目录——我不确定你是否需要它。


您可以使用以下代码按创建日期对文件列表进行排序,并将其转换为文件名数组:

String[] file_array = fileList.OrderBy(x => x.CreationTime).Select(x => x.FullName).ToArray();

如果要按降序排序,可以使用

String[] file_array = fileList.OrderByDescending(x => x.CreationTime).Select(x => x.FullName).ToArray();
于 2013-11-08T22:32:12.177 回答
1

您可以创建一个从目录中获取文件的递归函数。

void GetFiles(string directory, ref List<string> directories)
{
    var tempFiles = Directory.EnumerateFiles(directory);
    var tempDirs = Directory.EnumerateDirectories(directory);
    foreach (var x in tempFiles)
        directories.Add(x);
    foreach (var x in tempDirs)
        GetFiles(x, ref directories);
}

这将从文件夹及其子文件夹中获取所有文件。然后,您可以获取已枚举文件的数据。

于 2013-11-08T22:28:37.550 回答