【问题标题】:How to compare between two directories and get the missing files? c# winform如何比较两个目录并获取丢失的文件? c# winform
【发布时间】:2015-03-07 15:49:25
【问题描述】:

代码如下:

enter code here 

private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            string[] Folder1 = Directory.GetFiles(txtFolder1.Text, comboBox1.SelectedItem.ToString());
            string[] Folder1FileNames = new string[Folder1.Length];
            int c = 0;
            string fname1;


            foreach (string f in Folder1)
            {
                fname1 = Path.GetFileName(f);
                Folder1FileNames[c] = fname1;

                c++;
            }



            string fname2;
            string[] Folder2 = Directory.GetFiles(txtFolder2.Text, comboBox1.SelectedItem.ToString());
            string[] Folder2FileNames = new string[Folder2.Length];
            int t = 0;
            foreach (string f in Folder2)
            {
                fname2 = Path.GetFileName(f);
                Folder2FileNames[t] = fname2;
                t++;

            }
            int m=0;
            foreach (string f in Folder1FileNames)
            {
                while (f != Folder2FileNames[m] && m < Folder2FileNames.Length)
                {
                    m++;
                    if (m == Folder2FileNames.Length)
                    {
                        Label newlabe = new Label();
                        newlabe.Text = f;
                        if(!listBox1.Items.Contains(newlabe.Text))
                        {
                            listBox1.Items.Add(newlabe.Text);

                        }
                    }
                }
                m = 0;
            }



        }
        catch (Exception ex)
        {
            label1.Text = ex.Message;
        }

我创建了两个数组,其中包含来自 SourceDirectory(Folder1) 和 CompareDirectory(Folder2) 的文件,然后创建了更多 2 个数组,其中包含没有完整 ptah 的文件名(以便在 araays 之间进行比较),然后我尝试比较数组,并将丢失的文件添加到列表框中。 问题是,当我尝试它时,它给了我源文件夹中第一个丢失的文件,(例如源文件夹包含下一个文件:a.txt、b.txt、c.txt、d.txt 和比较文件夹包含:a .txt,b.txt ,列表框中的结果会是 c.txt ,标签会显示:"you are out of the array index" ) 我该怎么办 ? 谢谢!

【问题讨论】:

    标签: c# winforms directory compare


    【解决方案1】:

    您可以使用更简单、更整洁的解决方案,这样应该可以:

    var dir1Files = Directory
        .EnumerateFiles(txtFolder1.Text, "*", SearchOption.AllDirectories)
        .Select(Path.GetFileName);
    var dir2Files = Directory
        .EnumerateFiles(txtFolder2.Text, "*", SearchOption.AllDirectories)
        .Select(Path.GetFileName);
    var diffs = dir1Files.Except(dir2Files).Distinct().ToArray();   
    
    listBox1.Items.AddRange(diffs);
    

    【讨论】:

      【解决方案2】:

      谢谢你们,我成功地以我的方式做到了。 那是我的旧代码:

      int m=0;
              foreach (string f in Folder1FileNames)
              {
                  while (f != Folder2FileNames[m] && m < Folder2FileNames.Length)
                  {
                      m++;
                      if (m == Folder2FileNames.Length)
                      {
                          Label newlabe = new Label();
                          newlabe.Text = f;
                          if(!listBox1.Items.Contains(newlabe.Text))
                          {
                              listBox1.Items.Add(newlabe.Text);
      
                          }
                      }
                  }
                  m = 0;
              }
      

      新的是:`

       int m = 0;
                  foreach (string f in Folder1FileNames)
                  {
                      m = 0;
                      while (f != Folder2FileNames[m] && m < Folder2FileNames.Length-1)
                      {
                          m++;
                          if (m == Folder2FileNames.Length-1)
                          {
                              if (Folder2FileNames[m] != f)
                              {
      
                                  Label newlabe = new Label();
                                  newlabe.Text = f;
                                  if (!listBox1.Items.Contains(newlabe.Text))
                                  {
                                      listBox1.Items.Add(newlabe.Text);
      
                                  }
                              }
      
      
                          }
                      }
      
                  }
      

      现在它工作得很好,这样我就不会超出数组索引

      【讨论】:

        【解决方案3】:
            // Find the set difference between the two folders.  
            // For this example we only check one way.  
            var queryList1Only = (from file in list1  
                                  select file).Except(list2, myFileCompare);  
        
            Console.WriteLine("The following files are in list1 but not list2:");  
            foreach (var v in queryList1Only)  
            {  
                Console.WriteLine(v.FullName);  
            }  
        

        See full example

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多