Hallo liebe VBP-Community,
undzwar wollte ich so etwas wie einen alternative Explorer programmieren da der von Windows ja manchmal spinnt, ich hatte auch vor diesen Explorer hier im VBP zu veröffentlichen aber nur wenn ihr mir helft den sosnt werde ich das nie packen. Ich wollte in meinen Explorer direkt in die Version 1.0 Beta einen XML-basierten Verlauf integrieren der zwar im moment einigermasen funktioniert aber da dieser Tab-basiert ist (MDI-Tabcontrol) ist das ganze ein bisschen komplexer. Bisher habe ich es so gemacht das in der Main_Form ein unsichbares ListView ist in das alles aufgerufenen Pfade gespeichert werden bei dem Duplikate durch eine For-Each-Schleife gefiltert und gelöscht werden die wie folgt aussieht :
Spoiler anzeigen
Mein Explorer speichert 2 Sachen im Verlauf, einmal den Zeitpunkt und einmal den Ort... falls nun also ein Duplikat beim Ort gefunden wird wird dieses einfach entfernt. Nun kommt aber das eigentlich Problem undzwar habe ich nicht immer und immer und immer wieder Lust den ganzen Verlauf durch eine lange For-Each-Schleife beim navigieren zwischen den Pfaden komplett neu zu schreiben und als .XML abzuspeichern da dies sehr unsauber und Ressourcenfressen ist. Einfach gesagt ist es aktuell so das sobald man in einen anderen Pfad wechselt der Pfad in dem unsichtbaren ListView in der Main_Form gespeichert wird danach auf Duplikate geprüft würd und anschliessend werden alle Items im ListView in einer neuen .XML gespeicht bei der das gesamt ListView nochmal neu geschrieben wird was sehr unschön ist... also kurz und einfach ist es immer wieder : In ListView speichern, auf Duplikat prüfen, ListView in komplett neue .XML schreiben.
Speichern tu ich übrigens so :
Spoiler anzeigen
Gibt es keine bessere Methode? Muss ich echt bei jedem Pfad-Wechsel das gesamte Dokument nochmal neu schreiben?
MfG InputOutput
undzwar wollte ich so etwas wie einen alternative Explorer programmieren da der von Windows ja manchmal spinnt, ich hatte auch vor diesen Explorer hier im VBP zu veröffentlichen aber nur wenn ihr mir helft den sosnt werde ich das nie packen. Ich wollte in meinen Explorer direkt in die Version 1.0 Beta einen XML-basierten Verlauf integrieren der zwar im moment einigermasen funktioniert aber da dieser Tab-basiert ist (MDI-Tabcontrol) ist das ganze ein bisschen komplexer. Bisher habe ich es so gemacht das in der Main_Form ein unsichbares ListView ist in das alles aufgerufenen Pfade gespeichert werden bei dem Duplikate durch eine For-Each-Schleife gefiltert und gelöscht werden die wie folgt aussieht :
VB.NET-Quellcode
- Public Function RemoveDuplicates(ByVal lstView As ListView) As Boolean
- Dim itemI As ListViewItem
- Dim itemJ As ListViewItem
- Dim progress As Integer
- Dim count As Integer
- For i As Integer = lstView.Items.Count - 1 To 0 Step -1
- itemI = lstView.Items(i)
- progress = progress + 1
- For z As Integer = i + 1 To lstView.Items.Count - 1 Step 1
- itemJ = lstView.Items(z)
- If itemI.SubItems(1).Text = itemJ.SubItems(1).Text Then
- lstView.Items.Remove(itemJ)
- count = count + 1
- Exit For
- End If
- Next z
- Next (i)
- End Function
Mein Explorer speichert 2 Sachen im Verlauf, einmal den Zeitpunkt und einmal den Ort... falls nun also ein Duplikat beim Ort gefunden wird wird dieses einfach entfernt. Nun kommt aber das eigentlich Problem undzwar habe ich nicht immer und immer und immer wieder Lust den ganzen Verlauf durch eine lange For-Each-Schleife beim navigieren zwischen den Pfaden komplett neu zu schreiben und als .XML abzuspeichern da dies sehr unsauber und Ressourcenfressen ist. Einfach gesagt ist es aktuell so das sobald man in einen anderen Pfad wechselt der Pfad in dem unsichtbaren ListView in der Main_Form gespeichert wird danach auf Duplikate geprüft würd und anschliessend werden alle Items im ListView in einer neuen .XML gespeicht bei der das gesamt ListView nochmal neu geschrieben wird was sehr unschön ist... also kurz und einfach ist es immer wieder : In ListView speichern, auf Duplikat prüfen, ListView in komplett neue .XML schreiben.
Speichern tu ich übrigens so :
VB.NET-Quellcode
- Dim wtrXML As New XmlTextWriter(My.Application.Info.DirectoryPath & "\History.xml", System.Text.Encoding.UTF8)
- With wtrXML
- .Formatting = Formatting.Indented
- .WriteStartDocument()
- .WriteStartElement("WebSites")
- Dim objListViewItem As New ListViewItem
- For Each objListViewItem In ListView1.Items
- .WriteStartElement("WebSite")
- .WriteElementString("Name", objListViewItem.Text)
- .WriteElementString("URL", objListViewItem.SubItems(1).Text)
- .WriteElementString("Time", objListViewItem.SubItems(2).Text)
- .WriteEndElement()
- Next
- .WriteEndElement()
- .WriteEndDocument()
- .Flush()
- .Close()
- End With
Gibt es keine bessere Methode? Muss ich echt bei jedem Pfad-Wechsel das gesamte Dokument nochmal neu schreiben?
MfG InputOutput