VB.NET'te Host dosyasında olmayan değerleri ekleme

Bu konuyu okuyanlar

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Dim hosttakiler As New ArrayList() = Host dosyasındaki satırlar
Dim eklenecekler As New ArrayList() = TextBox içindeki satırlar bu liste sadece karşılaştırma için kullanılıyor
Dim temizliste As New ArrayList() = TextBox içindeki satırlar bu liste host dosyasında aynıları varsa bundan çıkartılıyor ve temiz bir liste olarak bu kullanılıyor

Arkadaşlar amacım host dosyasına değer ekleyen basit bir uygulama yapmak projemde bir textbox ve bir adet buton var hepsi bu yapmak istediğim textbox'um multiline özellikli buna alt alta eklediğim yazıları satır satır host dosyasında olup olmadığını kontrol etmek varsa bunu eklememek sadece olmayanları eklemek
kullandığım mantık şu 3 adet arraylist oluşturdum birine host dosyasındaki satırları ekledim diğer ikisinede textbox içindeki satırları eklkedim yani ikiside aynı bilgiyle dolduruldu hazırladığım kodda döngü içinde döngü yaptım texbox içindeki ilk satırı alıp host dosyasındaki tüm satırlarla karşılaştırıp varmı yokmu diye bakıyorum eğer varsa textbox bilgileriyle doldurulmuş olan temizlikliste 'den çıkartıyorum komutu bu temizliste.Remove(eklenecekler(say1).ToString) böylece en sonunda elimde host dosyasında olmayan satırların olduğu bir liste kalıyor(temizliste) ama malesef düzgün çalışmıyor problemin ne olduğuna bakabilirmisiniz


Kod:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim eklenecekler As New ArrayList()
        Dim hosttakiler As New ArrayList()
        Dim temizliste As New ArrayList()
        Dim hostdosyasi As String = Environment.GetFolderPath(Environment.SpecialFolder.System) + "\drivers\etc\hosts"


        For Each strLine As String In TextBox1.Text.Split(vbNewLine)
            eklenecekler.Add(strLine)
            temizliste.Add(strLine)
        Next



        Dim myfile As String = hostdosyasi
        Dim allLines As String() = File.ReadAllLines(myfile)
        For Each line As String In allLines
            hosttakiler.Add(line)
        Next

        For say1 As Integer = 0 To eklenecekler.Count - 1


            For say2 As Integer = 0 To hosttakiler.Count - 1
                If eklenecekler(say1).ToString = hosttakiler(say2).ToString Then
                    temizliste.Remove(eklenecekler(say1).ToString)
                    Exit For
                Else
                End If
            Next


        Next


        temizliste.Clear()
        hosttakiler.Clear()
        eklenecekler.Clear()
    End Sub
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
Selamlar,

ArrayList yerine HashSet kullanmanı tavsiye ederim. HashSet içerisinde mükerrer kayıt barındırmaz. Dolayısıyla aynı kaydı list içerisine eklemek istediğinde kontrol list tarafında yapılacaktır. Ayrıca bir kontrolden kurtulacaksın.

Aşağıdaki kod belirtmiş olduğun işlemi yapmaktadır.

Kod:
Public Class Form1

    Dim hostList As New HashSet(Of String)
    Dim hostFile As String = Application.StartupPath + "\\host.txt"

    Private Sub ReadTextFile()
        Dim hostText As System.Collections.Generic.IEnumerable(Of String) = System.IO.File.ReadAllLines(hostFile)

        Dim text As String
        For Each text In hostText
            hostList.Add(text)
        Next
    End Sub

    Private Sub WriteTextFile()
        Dim line As String

        For Each line In TextBox1.Lines
            hostList.Add(line)
        Next

        System.IO.File.WriteAllLines(hostFile, hostList)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        WriteTextFile()
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ReadTextFile()
    End Sub
End Class


ReadTextFile metodu ile text dosyası içeriği okunuyor ve satırlar hostList içerisine ekleniyor. TextBox içerisine girilen değerleri dosyaya yazmak için WriteTextFile metodu kullanılıyor. TextBox içindeki satırlar önce hostList içerisine ekleniyor sonrasında dosya içerisine kayıt ediliyor.

Bu şekilde mükerrer kayıt olmadan host dosyana değer ekleyebilirsin.
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Selamlar,

ArrayList yerine HashSet kullanmanı tavsiye ederim. HashSet içerisinde mükerrer kayıt barındırmaz. Dolayısıyla aynı kaydı list içerisine eklemek istediğinde kontrol list tarafında yapılacaktır. Ayrıca bir kontrolden kurtulacaksın.

Aşağıdaki kod belirtmiş olduğun işlemi yapmaktadır.

Kod:
Public Class Form1

    Dim hostList As New HashSet(Of String)
    Dim hostFile As String = Application.StartupPath + "\\host.txt"

    Private Sub ReadTextFile()
        Dim hostText As System.Collections.Generic.IEnumerable(Of String) = System.IO.File.ReadAllLines(hostFile)

        Dim text As String
        For Each text In hostText
            hostList.Add(text)
        Next
    End Sub

    Private Sub WriteTextFile()
        Dim line As String

        For Each line In TextBox1.Lines
            hostList.Add(line)
        Next

        System.IO.File.WriteAllLines(hostFile, hostList)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        WriteTextFile()
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ReadTextFile()
    End Sub
End Class


ReadTextFile metodu ile text dosyası içeriği okunuyor ve satırlar hostList içerisine ekleniyor. TextBox içerisine girilen değerleri dosyaya yazmak için WriteTextFile metodu kullanılıyor. TextBox içindeki satırlar önce hostList içerisine ekleniyor sonrasında dosya içerisine kayıt ediliyor.

Bu şekilde mükerrer kayıt olmadan host dosyana değer ekleyebilirsin.


HashSet(Of String) Kullanan çok kod buldum ama VS bu kodu tanımıyor bende eski versiyonlarda vardı herhalde şimdiki versiyonlarda bu kod kaldırıldı diye düşünmeye başladım Ben Visual Studio 2010 kullanıyorum yazdığın kodları denedim yine bu kodu tanımıyor.



:clover:
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
.NET Framework 4 ve üzeri versiyonlarda kullanabilirsin. Muhtemelen 3.5 ile geliştiriyorsun. 4.0 yaparsan düzelecektir.

Buradan bilgi alabilirsin.
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
.NET Framework 4 ve üzeri versiyonlarda kullanabilirsin. Muhtemelen 3.5 ile geliştiriyorsun. 4.0 yaparsan düzelecektir.

Buradan bilgi alabilirsin.

Teşekkürler doğru, kodu şimdi .NET Framework 4 ile denedim tanıdı ve host dosyasında istediğim gibi sadece olmayan bilgileri giriyor.
 
Üst