2016-03-21 10 views
1

Bu tür bir soruna bir yanıt bulmak için internette herhangi bir yer bulamıyorum, bu yüzden kendime de sorabileceğimi düşündüm. Daha sonra aynı dosya iki kez olup olmadığını görmek için daha sonra seçilen dosya dizinini ve tüm alt klasörleri arar bir işlevi çalıştıracak bir düğmeye basmak gerekir. Aşağıda gerekli tüm kod koyacağız:Çoğaltmalar bir <a0></ a0> düğmesiyle bir liste kutusunda nasıl görüntüleyebilirim? #

public partial class fileForm : Form 
{ 
     private string _filelistlocation; 
     private string _fileDest; 
     private string _fileSource; 

     public fileForm() 
     { 
      InitializeComponent(); 
     } 


public void fileForm_Load(object sender, System.EventArgs e) 
{ 
      _filelistlocation = textBox1.Text; 
      _fileDest = labelDestRoot.Text; 
      _fileSource = labelSourceRoot.Text; 
} 

private void button1_Click(object sender, System.EventArgs e) 
{ 
      checkedListBox1.Items.Clear(); 
      listBox2.Items.Clear(); 
      ReadFromList(); 
} 

private void GetDuplicates() 
{ 
      DirectoryInfo directoryToCheck = new DirectoryInfo(@"C:\temp\Location Source");` 

      FileInfo[] files = directoryToCheck.GetFiles("*.*", SearchOption.AllDirectories); 
      var duplicates = files.GroupBy(x => x.Name) 
            .Where(group => group.Count() > 1) 
            .Select(group => group.Key);//display duplicates 
      if (duplicates.Count() > 0) 
      { 
       MessageBox.Show("No Dupes"); 
       FileStream s2 = new FileStream(_filelistlocation, FileMode.Open, FileAccess.Read, FileShare.Read); 
      } 
      else 
       listBox1.Items.Add(duplicates);` 
     } 

private void button5_Click_1(object sender, EventArgs e) 
{ 
      GetDuplicates(); 
} 

DÜZENLEME: `özel boşluk GetDuplicates() { DirectoryInfo directoryToCheck = new DirectoryInfo (@ "C: \ temp \ Yer Kaynak");

 FileInfo[] files = directoryToCheck.GetFiles("*.*", SearchOption.AllDirectories); 
     var duplicates = files.GroupBy(x => x.Name) 
           .Where(group => group.Count() > 1) 
           .Select(group => group.Key);//display duplicates 
     if (!duplicates.Any()) 
     { 
      listBox1.Items.Add(duplicates); 

      FileStream s2 = new FileStream(_filelistlocation, FileMode.Open, FileAccess.Read, FileShare.Read); 



     } 
     else 
      MessageBox.Show("No Dupes"); 
    }` 

bunu beğendiniz mi?

DÜZENLEME 2: herkes yardım edebilirsen

private void GetDuplicates() 
    { 
     DirectoryInfo directoryToCheck = new DirectoryInfo(@"C:\temp\Location Source"); 

     FileInfo[] files = directoryToCheck.GetFiles("*.*", SearchOption.AllDirectories); 
     var duplicates = files.GroupBy(x => x.Name) 
           .Where(group => group.Count() > 1) 
           .Select(group => group.Key);//display duplicates 
     if (!duplicates.Any()) 
     { 
      listBox1.Items.Add(duplicates.ToArray()); 

      FileStream s2 = new FileStream(_filelistlocation, FileMode.Open, FileAccess.Read, FileShare.Read); 



     } 
     else 
      MessageBox.Show("No Dupes"); 
    } 

bu güzel olurdu. Teşekkürler!

+1

Göndermiş koduyla karşı karşıya sorunu nedir? –

+0

Düğmeyi tıklattığımda, "ben dupes yok" diyen mesaj kutusu açılır, oysa ben test ettiğim şeyin çiftleri vardır. –

+2

Mesajı engelliyorsa görüntülüyorsanız, başka bir blok olmalıdır. –

cevap

1

şey:

// Fluent: given directory name obtain duplicates with no temporarys 
    var duplicates = Directory 
    .EnumerateFiles(@"C:\temp\Location Source", "*.*", SearchOption.AllDirectories) 
    .GroupBy(file => Path.GetFileName(file)) 
    .Where(chunk => chunk.Count() > 1) 
    .Select(chunk => chunk.Key); 

    // Straightforward: are there ANY duplicates? 
    if (duplicates.Any()) { 
    // Please note "AddRange" (you have many items to add) 
    listBox1.Items.AddRange(duplicates.ToArray()); 

    //TODO: may be it should be put into "else" (no dups) 
    // Looks that you've forgot to wrap IDisposable into using... 
    using (FileStream s2 = new FileStream(_filelistlocation, 
     FileMode.Open, 
     FileAccess.Read, 
     FileShare.Read)) { 
     ... 
    } 
    } 
    else { 
    MessageBox.Show("No Dupes"); 
    } 
+0

işe yaramadı, bana çok fazla istisna hataları verdi. –

+0

@Robert Vasistha: Yazım hataları için üzgünüm: chu yerine chunk.Count() 'olmalıdır nk.Count' ve 'AddRange (duplicates.ToArray())' yerine '' AddRange (duplicates) '; Ben cevabını düzenledim –

+0

Ne halt! Gerçekten işe yaradı mı ?! Şimdiye kadar olduğu gibi şaşkın ve şaşkınım .Toarray() ve .count (daha önce denedim mi? Yine denedim işe yaradı mı? Ben indentasyon olabileceğini düşünüyorum ama görsel stüdyosu bana öyle geliyordu demişti. teşekkür ederim! –

2

Yorumlara dayanarak, iki kopya olduğunda "No dupes" mesajını görüntülüyorsunuz. İnvert sizin if statment böyle

if (duplicates.Count() <= 0) 
{ 
    MessageBox.Show("No Dupes"); 
    FileStream s2 = new FileStream(_filelistlocation, FileMode.Open, FileAccess.Read, FileShare.Read); 
} 
else 
{ 
    listBox1.Items.AddRange(duplicates); 
} 
İlgili konular