【问题标题】:How do I get all the files from all the Directories, inside other Directores and check for each file size?如何从其他目录中的所有目录中获取所有文件并检查每个文件的大小?
【发布时间】:2013-11-08 22:22:30
【问题描述】:
          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;
            }
        }

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您可以使用以下代码将所有目录的大小大于0的文件放入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();
    

    【讨论】:

    • Syzmon 以及我现在如何将此列表与我的其余代码一起使用?在我的其余代码中,我使用了 string[] 的 file_array,但现在我有一个列表。上面的其余代码带有 DateTime 并在其下循环..
    • 你如何处理其余的代码?这有点不清楚。你只是按创建时间排序?
    • Szymore 我刚刚更新了我的问题,以向您展示我稍后会做什么。我在 timer1 滴答事件中使用它来显示/显示图片框(如动画)中的图像/文件。这就是为什么我对它进行排序,以便它从第一个文件中对其进行动画处理。但在我使用 string[] 的 file_array 之前
    • Szymon 它的工作,但它从最后一个到第一个开始。至少在图像上,我看到了日期和时间,并且动画移到了错误的一侧。那么我如何让它从第一个开始到最后一个呢?也许排序应该是别的东西而不是创建时间?
    • Szymon 现在可以工作了,但我认为最好从计时器滴答事件中修复它,然后再反转数组。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 2010-11-28
      相关资源
      最近更新 更多