Normalde bir konuda birden fazla soru olduğu zaman cevap vermem ancak sizi az çok bilip suistimal etmeyeceğinizi düşünerek cevaplıyorum.
Öncelikle bir prosedür oluşturuyorum:
Sub KlasorleriListele()
Dim satir As Integer
Dim sarkiBaslangic, klasorBaslangic, sarkiAdiUzunlugu As Integer
Dim sarkiAdi, klasorAdi As String
Dim FilesInDir As String() = Directory.GetFiles(Application.StartupPath & "\REPERTUARX\", "*.txt", SearchOption.AllDirectories)
Dim SFile As String
ListView1.Items.Clear()
For Each SFile In FilesInDir
sarkiBaslangic = SFile.LastIndexOf("\") + 2
sarkiAdi = Mid(SFile, sarkiBaslangic)
sarkiAdiUzunlugu = Len(SFile) - sarkiBaslangic + 2
klasorBaslangic = SFile.IndexOf("X\") + 3
klasorAdi = Mid(SFile, klasorBaslangic, (Len(SFile) - sarkiAdiUzunlugu + 1) - klasorBaslangic)
ListView1.Items.Add(klasorAdi)
ListView1.Items(satir).SubItems.Add(sarkiAdi)
satir += 1
Next
End Sub
Listview'de sağ üst köşedeki üçgen kulakçık menüsünde Edit Columns tıklayın. Add butonuna tıklayıp yeni bir sütun ekleyin. Ben genişliklerini 100 ve 200 yaptım.
Yukarıdaki KlasorleriListele prosedürü tek başına çalışamaz. Bundan dolayı Formun Load yani Yüklendiğinde olayında ve butonun tıklanma olayında bu prosedürü çalıştırıyoruz:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
KlasorleriListele()
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
KlasorleriListele()
End Sub
Bu şekilde yapılacak olursa yukarıdaki kodlar ile listeleme işlemleri yapılabilir. Gelelim TXT dosyaların içeriğinin RichTextBox ta gösterilmesine.
Öncelikle yeni bir prosedür ekliyoruz:
Sub DosyaIceriginiOku(ByVal dosyaAdresi As String)
Try
Using sr As New StreamReader(dosyaAdresi, System.Text.Encoding.Default)
Dim dosyaIcerigi As String
dosyaIcerigi = sr.ReadToEnd()
RichTextBox1.Text = dosyaIcerigi
End Using
Catch e As Exception
MsgBox("Dosya içeriği okunamadı :" & vbCrLf & vbCrLf & e.Message)
End Try
End Sub
Bu prosedür öncekinden farklı olarak bir parametre alacak. Bu parametreye içeriğini görüntülemek istediğimiz TXT dosyasının adresini göndereceğiz. Ona sonra geliriz şimdi prosedürü incelemeye devam edelim.
Try-Catch kaçınılmaz olarak kullanılmalıdır yoksa programda kırılmaya sebebiyet verecek hatalar alabilirsiniz.
StreamReader da ikinci parametre olarak System.Text.Encoding.Default kullanmazsanız dosya içeriğini gösterirken Türkçe karakterler yerine garip karakterler çıkacaktır.
Gelelim bu prosedüre gönderilecek dosya adresini nasıl alacağımıza. Listview'in özelliklerinden FullRowSelect özelliğini True yapıyoruz. Listview üzerinde tıklama işleminde eğer tıklanılan satırın Index değeri değişirse tıklanan satırdaki klasör ve şarkı isimlerini kullarak Txt dosyası adresini prosedüre parametre olarak gönderiyoruz:
Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
DosyaIceriginiOku(Application.StartupPath & "\REPERTUARX\" & ListView1.Items(ListView1.FocusedItem.Index).SubItems(0).Text & "\" & ListView1.Items(ListView1.FocusedItem.Index).SubItems(1).Text)
End Sub