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

form1コンストラクターで作成した8つのpictureBoxがあります。この場合、タイマー ティック イベントで、画像を最初の pictureBox である pbs[0] に割り当てます。

私がする必要があるのは、ネストされたリストを使用して、各ディレクトリと内部のファイルを pictureBox に割り当てることです。したがって、ネストされたリストの最初のインデックスは、そこにあるファイルの最初の pictureBox pbs[0] に割り当てられ、次にインデックス 1 が pbs[1] に割り当てられます。

したがって、ネストされたリストに 5 つのインデックスがある場合は、5 つの pictureBox に割り当てる必要があります。

すべての画像を 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 に答える