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 より大きいかどうかを確認する必要があります。条件を満たしている場合は続行します。

EDIT** これは timer1 tick イベントです:

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 より大きいファイルを に取得できます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 に答える