Hallo Community
Sehr viele Programme zeigen die zuletzt geöffneten Dateien/Dokumente an, um so schneller Zugriff auf diese zu haben. Das kann auch für eigene Programme recht nützlich sein (z.B. für ein Textverarbeitungsprogramm, etc.). Um so etwas zu realisieren, kann man auf verschiedene Art und Weise vorgehen. Bei jeder Variante muss auf jeden Fall die Information irgendwo gespeichert werden. Zum Beispiel:
- Textdatei
- typisiertes Dataset (kommt im nächsten Teil)
Textdatei
Vorteile dieser Methode:
- schnell und einfach zu programmieren
- hinterlässt keine Reste auf dem Rechner
Nachteile:
- auch Laien, die die Textdatei finden, können diese verändern, löschen, etc.
- die Datei muss in einem fixen Dateipfad sein und darf nicht verschoben werden
Beispiel für das Laden und Speichern der zuletzt geöffneten Dokumente mit einer Textdatei
Die Datei heißt "Files.txt" und liegt im AppData-Verzeichnis.
EDIT: Den Code habe ich angepasst, aufgrund der Kritik von @VincentTB (Danke nochmal :))
Die Imports:
Bei dieser Methode benötigen wir nur eine Konstante für die maximale Anzahl der zuletzt geöffneten, die angezeigt werden sollen. Dafür aber noch zwei Variablen
Hier der Code, um die Dateinamen in die Listbox zu laden:
So wird eine neue Datei der Textdatei hinzugefügt:
Wir haben wieder die selbe Startform, wie im Registry-Beispiel und die Anwendung hat genau den gleichen Click-Event des Button und den selben DoubleClick-Event der Listbox, wie im Registry-Beispiel. Hier also der komplette Code der Form:
Welche Variante ihr wählt ist auch überlassen. Eine Methode mit nur Vorteilen gibt es denke ich nicht.
Das ist mein erstes Tutorial und ich hoffe ich konnte euch helfen. Es ist hauptsächlich für Anfänger gedacht, um zu lernen Daten zu speichern und zu laden aus Textdateien oder aus der Registry. Seit nicht so streng mit mir, falls mein Code nicht ganz sauber ist Für Kritik und Verbesserungen bin ich stets offen.
Gruß
Switcherlapp97
Sehr viele Programme zeigen die zuletzt geöffneten Dateien/Dokumente an, um so schneller Zugriff auf diese zu haben. Das kann auch für eigene Programme recht nützlich sein (z.B. für ein Textverarbeitungsprogramm, etc.). Um so etwas zu realisieren, kann man auf verschiedene Art und Weise vorgehen. Bei jeder Variante muss auf jeden Fall die Information irgendwo gespeichert werden. Zum Beispiel:
- Textdatei
- typisiertes Dataset (kommt im nächsten Teil)
Textdatei
Vorteile dieser Methode:
- schnell und einfach zu programmieren
- hinterlässt keine Reste auf dem Rechner
Nachteile:
- auch Laien, die die Textdatei finden, können diese verändern, löschen, etc.
- die Datei muss in einem fixen Dateipfad sein und darf nicht verschoben werden
Die Datei heißt "Files.txt" und liegt im AppData-Verzeichnis.
EDIT: Den Code habe ich angepasst, aufgrund der Kritik von @VincentTB (Danke nochmal :))
Die Imports:
Bei dieser Methode benötigen wir nur eine Konstante für die maximale Anzahl der zuletzt geöffneten, die angezeigt werden sollen. Dafür aber noch zwei Variablen
Hier der Code, um die Dateinamen in die Listbox zu laden:
VB.NET-Quellcode
- Private Sub GetLastFiles()
- Dim textfile As New FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Files.txt"))
- 'Überprüfen, ob die Textdatei existiert (im AppData-Verzeichnis)
- If File.Exists(textfile.FullName) Then
- 'Die Zeilen der Textdatei auslesen
- Dim files() As String = File.ReadAllLines(textfile.FullName)
- 'Die letzten Zeilen der Liste als erstes hinzufügen
- For i As Integer = files.Count - 1 To 0 Step -1
- If Not files(i) = "" Then
- LastFiles.Add(New FileInfo(files(i)))
- 'Wenn die Liste die maximale Anzahl der Dateien erreicht hat )-> Schleife beenden
- If LastFiles.Count = maxFiles Then
- Exit For
- End If
- End If
- Next
- 'LastFiles Liste an die Listbox binden
- ListBox1.DataSource = LastFiles
- 'Nur den Namen der Datei anzeigen
- ListBox1.DisplayMember = "Name"
- End If
- End Sub
So wird eine neue Datei der Textdatei hinzugefügt:
VB.NET-Quellcode
- Public Sub AddFileToList(ByVal FilePath As String)
- 'Die Zeilen der Textdatei auslesen
- Dim lines() As String = File.ReadAllLines(textfile.FullName)
- Using sw As New StreamWriter(textfile.FullName)
- 'Alle Zeilen durchgehen
- For i As Integer = 0 To lines.Count - 1
- 'Falls eine Zeile den Pfad enthält, der gerade hinzugefügt werden soll, wird die alte Zeile in der Textdatei mit dem Pfad entfernt
- If Not lines(i) = FilePath Then
- sw.WriteLine(lines(i))
- End If
- Next
- 'Pfad, der hinzugefügt werden soll in Textdatei schreiben.
- sw.WriteLine(FilePath)
- End Using
- End Sub
Wir haben wieder die selbe Startform, wie im Registry-Beispiel und die Anwendung hat genau den gleichen Click-Event des Button und den selben DoubleClick-Event der Listbox, wie im Registry-Beispiel. Hier also der komplette Code der Form:
VB.NET-Quellcode
- Option Strict On
- Imports System.IO
- Public Class Form1
- Const maxFiles As Integer = 5
- Private LastFiles As New List(Of FileInfo)
- Private textfile As New FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Files.txt"))
- Private Sub GetLastFiles()
- Dim textfile As New FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Files.txt"))
- 'Überprüfen, ob die Textdatei existiert (im AppData-Verzeichnis)
- If File.Exists(textfile.FullName) Then
- 'Die Zeilen der Textdatei auslesen
- Dim files() As String = File.ReadAllLines(textfile.FullName)
- 'Die letzten Zeilen der Liste als erstes hinzufügen
- For i As Integer = files.Count - 1 To 0 Step -1
- If Not files(i) = "" Then
- LastFiles.Add(New FileInfo(files(i)))
- 'Wenn die Liste die maximale Anzahl der Dateien erreicht hat )-> Schleife beenden
- If LastFiles.Count = maxFiles Then
- Exit For
- End If
- End If
- Next
- 'LastFiles Liste an die Listbox binden
- ListBox1.DataSource = LastFiles
- 'Nur den Namen der Datei anzeigen
- ListBox1.DisplayMember = "Name"
- End If
- End Sub
- Public Sub AddFileToList(ByVal FilePath As String)
- 'Die Zeilen der Textdatei auslesen
- Dim lines() As String = File.ReadAllLines(textfile.FullName)
- Using sw As New StreamWriter(textfile.FullName)
- 'Alle Zeilen durchgehen
- For i As Integer = 0 To lines.Count - 1
- 'Falls eine Zeile den Pfad enthält, der gerade hinzugefügt werden soll, wird die alte Zeile in der Textdatei mit dem Pfad entfernt
- If Not lines(i) = FilePath Then
- sw.WriteLine(lines(i))
- End If
- Next
- 'Pfad, der hinzugefügt werden soll in Textdatei schreiben.
- sw.WriteLine(FilePath)
- End Using
- End Sub
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- Using ofd As New OpenFileDialog
- If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
- AddFileToList(ofd.FileName)
- Process.Start(ofd.FileName)
- End If
- End Using
- End Sub
- Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- GetLastFiles()
- End Sub
- Private Sub ListBox1_DoubleClick(sender As Object, e As System.EventArgs) Handles ListBox1.DoubleClick
- If Not ListBox1.SelectedItems.Count = 0 Then
- Process.Start(ListBox1.SelectedItem.ToString)
- End If
- End Sub
- End Class
Welche Variante ihr wählt ist auch überlassen. Eine Methode mit nur Vorteilen gibt es denke ich nicht.
Das ist mein erstes Tutorial und ich hoffe ich konnte euch helfen. Es ist hauptsächlich für Anfänger gedacht, um zu lernen Daten zu speichern und zu laden aus Textdateien oder aus der Registry. Seit nicht so streng mit mir, falls mein Code nicht ganz sauber ist Für Kritik und Verbesserungen bin ich stets offen.
Gruß
Switcherlapp97
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Switcherlapp97“ ()