2016-04-09 14 views
-1

Bir dizinden dosya adları olan öğeleri bir liste kutusunda görüntüleyebiliyorum. Yeni eklenen öğeler program yeniden derlenene kadar görüntülenmiyor. "ListBox.Refresh()" ı denedim, ama işe yaramadı. Herhangi bir tavsiye çok takdir edilecektir. TeşekkürlerlistBox program yeniden derlenene kadar içerik görüntülenmiyor C#

 InitializeComponentDirectoryInfo dir = new DirectoryInfo(".\\Notes\\"); 
     FileInfo[] files = dir.GetFiles("*.txt"); 
    foreach (FileInfo file in files) 
     { 
     listBox1.Items.Add(file); 
     } 
+0

Ne demek? Bu yeni öğeler, Notes klasöründeki programınızdan harici olarak oluşturulmuş yeni dosyalar mı? – Steve

+0

Program, bir .TXT dosyasında okur ve bu .TXT dosyasını Notes dizinine kopyalar. Liste kutusu, Notes dizininin içeriğini görüntüler ... (mantıklı olduğunu umar) .. – JonnyAppleseed

+0

Ne zaman InitializeComponentDirectoryInfo? –

cevap

1

ListBox (ve genelde programınız) Notes dizinine yeni dosyalar ekleyip eklemediğinizi bilmenin bir yolu yoktur. Bu bilgi sadece Dosya Sistemi ile bilinir. Neyse ki NET Framework program FileSystemWatcher adlı ....

Bu FileSystemWatcher sınıf

bir örneğini kullanarak bir sistem klasörü izleme çeşit uygulayan nasıl bir örnek bir sınıf kullanarak bu olayların bildirilmesini sağlar
ListBox lb = new ListBox(); 

void Main() 
{ 
    FileSystemWatcher f = new FileSystemWatcher(@"d:\temp"); 
    f.NotifyFilter = NotifyFilters.FileName;  
    f.Created += new FileSystemEventHandler(watcher_Created);  
    f.EnableRaisingEvents = true; 

    Form fm = new Form(); 
    lb.Dock = DockStyle.Fill; 
    foreach(string file in Directory.EnumerateFiles(f.Path)) 
     lb.Items.Add(Path.GetFileName(file)); 
    fm.Controls.Add(lb); 
    fm.ShowDialog(); 
} 


private void watcher_Created(object source, FileSystemEventArgs e) 
{ 
    string newFile = e.Name; 
    if(!lb.Items.Contains(newFile)) 
     lb.Items.Add(newFile); 

} 

Orijinal kodunuzda bazı değişiklikler yaptığımı unutmayın. Tam bir FileSystemInfo sınıfına ihtiyacınız yoksa, bu sınıfı kullanmaya gerek yoktur, ancak daha basit Directory sınıfı dosya adlarını almak için yeterlidir. Daha sonra döngü, kodunuzun bir dizi dosyadan önce doldurmadan liste kutusunu doldurabilmesini sağlayan EnumerateFiles sınıfı kullanılarak oluşturulur.

(IE Visual Studio olduğu gibi, o işe yaramaz çalıştırmak etmeye kalkma sen LINQPad kullanarak bu kodu test edebilirsiniz) _Newly items_ eklenen

İlgili konular