Benutzer mit den meisten Antworten
Variabeln zur Auswertung einer Ini-Datei übergeben

Frage
-
Hallo,
ich stecke mal wieder fest und brauche Hilfe.
Ich schreibe ein Programm, dass eine Menge Daten verarbeitet und ich möchte die Möglichkeit haben, zu prüfen ob die alle da sind.
In Form1 sind diese Daten modulweit deklariert.
Da gibt es beispielsweise den 1 Eintrag aus dem ersten Ordner. Der Ordner heisst ganz kryptisch O1L1
Die der Pfad für O1L1 setzt sich zusammen aus:
ZielVerzeichnis & "\" & Ornder1 & "\" & Name
Daraus ergibt sich im Beispiel C:\Programme\Stefan\Probe1\Test.txt"
Soweit so gut. Die Auswertung mach ich nicht in Form1 sondern Form7.
Wenn ich dort für das Laden der Form7 angebe:
Label1.Text= O1L1 erhalte ich die korrekte Anzeige: C:\Programme\Stefan\Probe1\Test.txt
Nun möchte ich der Reihe nach alle Einträge kontrollieren und das Ergebnis (gefunden oder nicht gefunden) in eine Ini-Datei schreiben, die ich SD.log genannt habe. (ini erschien mir zu "banal ;-) )
Hier mein Code:
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Ordner As String = "O" 'Kürzel für Ordner
Dim Anhang As String = "L" 'Kürzel für Anhnag
Try
Dim d As DirectoryInfo
Dim a As Integer 'Dateien 1 - 300
Dim o As Integer 'Ordner 1 -60
Dim dateiname As String = "O" & o.ToString & Anhang & a.ToString
'z.B. O1L1 = "C:\Programme\Stefan\Probe1\Test.txt"' Muss von Anwendung übergeben werden
Const VERZEICHNIS = "C:\Programme\Stefan\SD.log"
For o = 1 To 10 'Maximalwert 60
d =
New DirectoryInfo(dateiname) 'Generiert das Ordnerverzeichnis
For a = 1 To 10 'Maximalwert 300
dateiname =
"O" & o.ToString & "L" & a.ToString 'setzt aus Fragmenten z.B. O2L45 zusammen
If File.Exists (dateiname) Then
'Ini(-Eintrag)
' Einzelnen Eintrag im Abschnitt [Settings] speichern
Dim myIniFile As String
myIniFile = VERZEICHNIS
WritePrivateProfileString(
"Liste der Verzeichnisse und Dateien", dateiname, " ok", _
myIniFile)
'Ende INi-Eintrag
Else
Dim myIniFile As String
myIniFile = VERZEICHNIS
WritePrivateProfileString(
"Liste der Verzeichnisse und Dateien", dateiname, " nicht gefunden", _
myIniFile)
'Ende INi-Eintrag
End If
Next (a) 'Dateiname
Next (o) 'Ordnername
Button2.Enabled =
True
Label1.Text =
"Die Überprüfung ist beendet. Um die Log-Datei zu öffnen, drücken Sie den ''Log-File anzeigen''-Schalter"
Catch ex As Exception
MsgBox(
"Fehler beim Erstellen der Log-Datei.")
End Try
End Sub
Was nun passiert ist folgendes. Der Dateiname wird so behandelt, als hätte ich ihn in Anführungszeichen gesetzt. Mein Ergebnis sieht also wie folgt aus:
[Liste der Verzeichnisse und Dateien]
O1L1= nicht gefunden
O1L2= nicht gefunden
O1L3= nicht gefunden
O1L4= nicht gefunden
O1L5= nicht gefunden
O1L6= nicht gefunden
O1L7= nicht gefunden
O1L8= nicht gefunden
O1L9= nicht gefunden
O1L10= nicht gefunden
O2L1= nicht gefunden
O2L2= nicht gefunden
O2L3= nicht gefunden
O2L4= nicht gefunden
O2L5= nicht gefunden
O2L6= nicht gefunden
O2L7= nicht gefunden
O2L8= nicht gefunden
O2L9= nicht gefunden
So wie ich das sehe, weiß mein Programm nicht, dass es sich bei der generierten Variablen eben um Variablen handelt?
Was mache ich falsch oder wie mache ich es richtig?
Wenn ich den kompletten Pfad mit Namen von Hand eintrage stimmt das Ergebnis. Da dies jedoch in meinem Programm im Extremfall bis zu 18.000 Dateien werden können ist das keine Lösung. Mein Programm muss also lernen, dass eine Variable innerhalb der Prüfroutine genauso eine Variable ist wie beim Programmstart.
Für eure Hilfe vielen Dank im Voraus.
Stefan
Liebe Grüße Stefan
Antworten
-
Hallo Stefan,
der folgende Codeabschnitt ins Unreine runtergetippt:
Imports System.Collections.Generic Imports System.IO Imports System.Text Public Class DateiAblage Private _verzeichnisse As SortedList(Of String, String) Private _vorlagen As SortedList(Of String, String) Public ReadOnly Property Verzeichnisse() As SortedList(Of String, String) Get If Me._verzeichnisse Is Nothing Then Me._verzeichnisse = New SortedList(Of String, String)(StringComparer.OrdinalIgnoreCase) End If Return Me._verzeichnisse End Get End Property Public ReadOnly Property Vorlagen() As SortedList(Of String, String) Get If Me._vorlagen Is Nothing Then Me._vorlagen = New SortedList(Of String, String)(StringComparer.OrdinalIgnoreCase) End If Return Me._vorlagen End Get End Property Public Function GetDateiname(ByVal verzeichnisKey As String, ByVal vorlageKey As String) As String Return Path.Combine(Me.Verzeichnisse(verzeichnisKey), Me.Vorlagen(vorlageKey)) End Function Public Sub Verify(ByVal fileName As String, ByVal verbose As Boolean) Dim verzeichnisAnzahl As Integer Dim verzeichnisFehlt As Integer Dim vorlageAnzahl As Integer Dim vorlageFehlt As Integer Using logWriter As New StreamWriter(fileName, False, Encoding.Default) ' Verzeichnisse prüfen For Each verzeichnisKey As String In Me.Verzeichnisse.Keys verzeichnisAnzahl += 1 Dim verzeichnisName As String = Me.Verzeichnisse(verzeichnisKey) If Not Directory.Exists(Me.Verzeichnisse(verzeichnisKey)) Then verzeichnisFehlt += 1 If verbose Then logWriter.WriteLine( _ "Verzeichnis '{0}' = '{1} nicht vorhanden.", _ verzeichnisKey, verzeichnisName) End If Else ' Vorlagen im Verzeichnis prüfen For Each vorlageKey As String In Me.Vorlagen.Keys vorlageAnzahl += 1 Dim vorlageName As String = Me.Vorlagen(vorlageKey) Dim dateiName As String = GetDateiname(verzeichnisKey, vorlageKey) If Not File.Exists(dateiName) Then vorlageFehlt += 1 If verbose Then logWriter.WriteLine( _ "Verzeichnis '{0}' Vorlage '{1}' nicht vorhanden.", _ verzeichnisKey, vorlageKey) End If End If Next End If Next logWriter.WriteLine() logWriter.WriteLine("Zusammenfassung") logWriter.WriteLine("{0} Verzeichnisse", verzeichnisAnzahl) logWriter.WriteLine("{0} Verzeichnisse fehlen", verzeichnisFehlt) logWriter.WriteLine("{0} Vorlagen", vorlageAnzahl) logWriter.WriteLine("{0} Vorlagen fehlen", vorlageFehlt) End Using End Sub <Conditional("Debug")> _ Friend Shared Sub Test() Dim Ablage As New DateiAblage() Ablage.Verzeichnisse.Add("O1", "C:\TEMP\Verzeichnis1") Ablage.Verzeichnisse.Add("O2", "C:\TEMP\Verzeichnis2") Ablage.Verzeichnisse.Add("O3", "C:\TEMP\Verzeichnis3") Ablage.Vorlagen.Add("A1", "Vorlage1.doc") Ablage.Vorlagen.Add("A2", "Vorlage2.bmp") Ablage.Vorlagen.Add("A3", "Vorlage3.xls") Const Protokoll As String = "C:\TEMP\Ablage.log" Ablage.Verify(Protokoll, True) Dim ausgabe As String = File.ReadAllText(Protokoll, Encoding.Default) Console.WriteLine(ausgabe) End Sub End Class
Die Verzeichnisse, Vorlagen werden über zwei Auflistungen angesprochen.
Zur Addressierung dienen hier Zeichenketten als Schlüssel, dass können
aber auch Integer sein, wenn das für Dein jetziges Programm günstiger ist.
Die Methode Verify prüft die Zusammenhänge und gibt entweder eine kurze
oder lange Liste aus.
Idealerweise würde man dort auch das Speichern und Laden der Einstellungen
vornehmen. Da ich nicht weiss wie Du das bisher machst (INI?), habe ich das
weggelassen.
Gruß Elmar
- Als Antwort markiert Giftzwockel Freitag, 31. Juli 2009 06:30
-
Prima, danke. Ich schaue mir das am Wochenende mal an.
Mit der Lösung dieses Problems wäre mein erstes größeres Projekt tatsächlich in allen Punkten abgehandelt.
Liebe Grüße Stefan- Als Antwort markiert Giftzwockel Montag, 10. August 2009 15:23
Alle Antworten
-
Hallo Stefan,
Deinen Ansatz solltest Du dringend überdenken.
So kann das mit Deiner Schleife so nicht funktionieren.
Die Aussage
Label1.Text= O1L1 erhalte ich die korrekte Anzeige: C:\Programme\Stefan\Probe1\Test.txt
lässt mich vermuten das Du derzeit einzelne Variablen O1L1, O1L2, ..., O60L300 hast.
Nicht nur das 18000 Variablen jedes Programm verunstalten ;-),
darauf kannst Du nicht einfach mit einer Schleife zurückgreifen, die einen Variablen-Namen bildet.
(Es gäbe zwar einen Weg via Reflection, aber den werde ich zunächst nicht weiterverfolgen).
Sinnvoller ist es für die Ordner / Ablagennamen eine Auflistung in Form von List(Of T)
oder wenn Du über Schlüssel zurückgreifen willst, via Dictionary(Of K, V) .
Davon gibt es diverse Abwandlungen für speziellere Zwecke, etwas allgemeiner
beschreibt dies: Verwalten von Objekten mit Auflistungen
Damit reduziert sich die Zahl der globalen Variablen auf eine - oder zwei,
wenn Du Ordner und Ablagen getrennt halten und später zusammenfügen willst.
Eher am Rande:
Du solltest die Ausgabe der Überprüfung überdenken. Denn niemand wird 18.000 Zeilen im Protokoll lesen -
wo vielleicht nur einmal "nicht gefunden" drinsteht - da wäre die Reduktion auf die fehlenden sinnvoller,
und wenn ein Verzeichnis nicht vorhanden ist, so gilt das auch für untergeordnete Dateien.
Anstatt den Weg über eine INI-Datei, die Du als LOG tarnst solltest Du sie direkt
als Datei via StreamWriter ausgeben. Anleitungen dazu findest Du unter: Allgemeine E/A-Aufgaben
Das war jetzt nur sehr grob, was mir beim Lesen aufgefallen ist.
Einen konkreteren Lösungsvorschlag liefere ich gerne nach,
wenn Du mehr über die Zusammenhänge von Ordnern/Ablagen
und der Verwendung im Programm (abseits der Prüfung) erzählst.
Gruß Elmar -
Hallo Elmar,
in allem was du schreibst kann ich dir nur zustimmen.
Es macht weder Sinn noch Spaß im Extremfall 18.000 Variablen zuverwalten und dies nicht zuletzt, weil die Variablen in meinem Programm einzelnen Dateien entsprechen, die später innerhalb des Programm augerufen werden können müssen.
Leider wusste ich zu Beginn meines Programms nocht nicht das, was ich inzwischen weiß. Ich war der Ansicht, dass ich die Variabeln u.a. auch zur Installation benötige.
Gestern habe ich mich dann aber mit dem Inno Setup Compiler etwas auseinander gesetzt und festgestellt, dass ich zur Installation die Variablen nicht brauche, da reichen mir die eigentlichen Vorlagen innerhalb der Verzeichnisse.
Die zweite Idee war es, die Vorlagen als Variable innerhalb einer Liste zur Verfügung zu stellen.
Auch das ist Schnee von gestern, denn inzwischen habe ich gelernt, wie man Verzeichnisse und Files innerhalb eines Verzeichnisses in einer Listbox darstellt und aufrufen kann. Das ist in jedem Fall realistischer als dies mit Varibeln zu machen, da sich der Inhalt eines Verzeichnisses ja auch durch einen Eintrag ändern kann, der nicht durch einen mittels Variable verwalteten Eintrag verwaltet wird. Somit ist das reale auslesen eines Verzeichnisses (ähnlich dem Explorer) immer zuverlässiger und genauer als zu prüfen was sollte vorhanden sein und was ist vorhanden.
Streng genommen fehlt mir jetzt der Grund, wozu ich diese 18000 Variablen überhaupt benötige. Das ist ein "Wasserkopf" ohne Sinn.Ursprünglich war es angedacht, dass verschiedene Vorlagen (meist Textvorlagen) in verschiedenen Ordnern hinterlegt sind. Über die Variable konnte für jede einzelne Vorlage ein solcher "Prüfort" definiert werden. Es erschein mir deshalb als wichtig, weil das Programm modular arbeiten soll, das heißt, der eine Verein benennt Ordner1 als "Mitglieder", ein anderer vielleicht "Rundenwettkämpfe" ....
Insgesamt habe ich mal für 60 Ordner vorgearbeitet was nichts anderes bedeutet, als das alle Ordner angelegt werde (60 Tabs), jedoch die unverwendeten über Remove wieder entfernt werden. So werden nur die tatsächlich definierten Registerkarten angezeigt.
Da ich mir vorstellen kann, dass es innerhalb verschiedener Vereine (z.B. Schützenverein) Vorlagen gibt, die man schon wegen Datenschutz und beispielsweise Waffenrecht an Dritte herausgibt, dachte ich mir, kann ich die Namen bzw. den kompletten Pfad der Vorlagen in der Variablen definieren und später über die als Log-Datei getarnte Ini-Datei überprüfen, ob die Datei tatsächlich vorhanden ist. Um beim Beispiel Schützenverein zu bleiben, würde kein Verein die Liste der Mitglieder an Dritte aushändigen noch dazu wo solche Listen hier noch zusätzlich Angaben wie beispielsweise Waffenbestand, Zusatzausbildung wie Sprengstofferlaubnis, Wiederlader, Munitionserwerb etc. beinhalten würde.
Natürlich merkt man es auch so, wenn eine gesuchte Datei nicht da ist. Aber genau das soll ja mein kleines Programm verhindern. Sinn der Überprüfung war es eben sicherzustellen bzw. zu püfen, ob alle Vorlagen die vorhanden sein sollten, tatsächlich vorhanden sind.
Wenn man nun davon ausgeht, dass es der Normalfall sein sollte, dass die Dateien dann auch vorhanden sind, macht es sicher Sinn, ggf. die 10 - 15 fehlenden Dateien aufzulisten anstelle 17.985 vorhandene Dateien als vorhanden darzustellen.
Hier wäre es sicher sinnvoller und aussagefähiger, wenn es eine Möglichkeit gäbe, die aussagefähig ist und folgende Angaben hat:
1. Datum und Uhrzeit der Prüfung
2. Aufstellung der fehlenden Dateien
3. Angabe wieviele Dateien gesucht wurden.
Aus 2 und 3 könnte man so was machen wie:
y Dateien geprüft
x Dateien nicht gefunden
und dann den Pfad wo diese sein sollten.
Nur hierzu fehlt mir der Ansatz und das Wissen.
Liebe Grüße Stefan -
Hallo Stefan,
der folgende Codeabschnitt ins Unreine runtergetippt:
Imports System.Collections.Generic Imports System.IO Imports System.Text Public Class DateiAblage Private _verzeichnisse As SortedList(Of String, String) Private _vorlagen As SortedList(Of String, String) Public ReadOnly Property Verzeichnisse() As SortedList(Of String, String) Get If Me._verzeichnisse Is Nothing Then Me._verzeichnisse = New SortedList(Of String, String)(StringComparer.OrdinalIgnoreCase) End If Return Me._verzeichnisse End Get End Property Public ReadOnly Property Vorlagen() As SortedList(Of String, String) Get If Me._vorlagen Is Nothing Then Me._vorlagen = New SortedList(Of String, String)(StringComparer.OrdinalIgnoreCase) End If Return Me._vorlagen End Get End Property Public Function GetDateiname(ByVal verzeichnisKey As String, ByVal vorlageKey As String) As String Return Path.Combine(Me.Verzeichnisse(verzeichnisKey), Me.Vorlagen(vorlageKey)) End Function Public Sub Verify(ByVal fileName As String, ByVal verbose As Boolean) Dim verzeichnisAnzahl As Integer Dim verzeichnisFehlt As Integer Dim vorlageAnzahl As Integer Dim vorlageFehlt As Integer Using logWriter As New StreamWriter(fileName, False, Encoding.Default) ' Verzeichnisse prüfen For Each verzeichnisKey As String In Me.Verzeichnisse.Keys verzeichnisAnzahl += 1 Dim verzeichnisName As String = Me.Verzeichnisse(verzeichnisKey) If Not Directory.Exists(Me.Verzeichnisse(verzeichnisKey)) Then verzeichnisFehlt += 1 If verbose Then logWriter.WriteLine( _ "Verzeichnis '{0}' = '{1} nicht vorhanden.", _ verzeichnisKey, verzeichnisName) End If Else ' Vorlagen im Verzeichnis prüfen For Each vorlageKey As String In Me.Vorlagen.Keys vorlageAnzahl += 1 Dim vorlageName As String = Me.Vorlagen(vorlageKey) Dim dateiName As String = GetDateiname(verzeichnisKey, vorlageKey) If Not File.Exists(dateiName) Then vorlageFehlt += 1 If verbose Then logWriter.WriteLine( _ "Verzeichnis '{0}' Vorlage '{1}' nicht vorhanden.", _ verzeichnisKey, vorlageKey) End If End If Next End If Next logWriter.WriteLine() logWriter.WriteLine("Zusammenfassung") logWriter.WriteLine("{0} Verzeichnisse", verzeichnisAnzahl) logWriter.WriteLine("{0} Verzeichnisse fehlen", verzeichnisFehlt) logWriter.WriteLine("{0} Vorlagen", vorlageAnzahl) logWriter.WriteLine("{0} Vorlagen fehlen", vorlageFehlt) End Using End Sub <Conditional("Debug")> _ Friend Shared Sub Test() Dim Ablage As New DateiAblage() Ablage.Verzeichnisse.Add("O1", "C:\TEMP\Verzeichnis1") Ablage.Verzeichnisse.Add("O2", "C:\TEMP\Verzeichnis2") Ablage.Verzeichnisse.Add("O3", "C:\TEMP\Verzeichnis3") Ablage.Vorlagen.Add("A1", "Vorlage1.doc") Ablage.Vorlagen.Add("A2", "Vorlage2.bmp") Ablage.Vorlagen.Add("A3", "Vorlage3.xls") Const Protokoll As String = "C:\TEMP\Ablage.log" Ablage.Verify(Protokoll, True) Dim ausgabe As String = File.ReadAllText(Protokoll, Encoding.Default) Console.WriteLine(ausgabe) End Sub End Class
Die Verzeichnisse, Vorlagen werden über zwei Auflistungen angesprochen.
Zur Addressierung dienen hier Zeichenketten als Schlüssel, dass können
aber auch Integer sein, wenn das für Dein jetziges Programm günstiger ist.
Die Methode Verify prüft die Zusammenhänge und gibt entweder eine kurze
oder lange Liste aus.
Idealerweise würde man dort auch das Speichern und Laden der Einstellungen
vornehmen. Da ich nicht weiss wie Du das bisher machst (INI?), habe ich das
weggelassen.
Gruß Elmar
- Als Antwort markiert Giftzwockel Freitag, 31. Juli 2009 06:30
-
Hallo Elmar,
jetzt habe ich gerade versucht den Code soweit zu interpretieren und Fragen zu stellen und dann verabschiedt sich der PC.
Ich versuchs nochmal aber diesmal kürzer, da ich durch das Aufarbeiten selbst schon etwas merh verstanden habe.
Also ich glaube verstanden zu haben, dass ich in der
Public Class DateiAblage zwei Listen anlegen muss?
In Private _verzeichnisse kommen die Variablen der Verzeichnisse und
in Private _ Vorlagen die Variablen der Dateien
Wenn das noch stimmt hier meine erste Frage:
Wenn ich die vorab in Form 1 als Modul Module1 als Public deklariert habe, soll ich die dann besser in Form1 rausnehmen (brauche die dort nach Umstellung der Auswertung dort nicht mehr) und hier parken?
Als nächstes kommt das Lesen dieser Anagaben. Das Programm prüft also was vorhanden sein soll und erstellt eine Liste für Verzeichnisse und Dateien?
Noch richtig?
Bevor die Auswertung erfolgt werden Variablen deklariert jeweils für die Anzahl der Verzeichnisse/Dateien (Soll) und Anzahl der fehlenden Verzeichnisse/Vorlagen.
Danach folgt die Auswertung:
Hier wird zunächst gezählt wie viele Verzeichnisse/Dateien in der Klasse Dateiablage deklariert sind und werden durchnummeriert.
Im nächsten Schritt wird geprüft, ob das Verzeichnis/Datei real existiert.
Wenn nein, wird pro fehlender Datei/Verzeichnis der Zähler um 1 erhöht und der Name der fehlenden Datei/Verzeichnis über den StreamWriter, der nun logWriter heißt, geschrieben. (In eine Console??)
Am Ende gibt es eine Auswertung als Zusammenfassung.
Gesamtzahl Verzeichnisse
ANzahl der fehlednen Verzeichnisse
Dto mit Dateien
Zum Schluss wird aus der Liste der Dateien die da sein sollten (DateiAblage) beim Start eine neue die als
Dim Ablage As New DateiABlage deklariert wird?
Dieser Ablage werden dann die Verzeichnisse/Vorlagen hinzugefügt wobei mir die Bezeichnungen als "01" bzw. "A1" ... noch nicht ganz klar ist. Das ist vermutlich ein Unterscheidungsmerkmal für Verzeichnisse (O 1 - x) und Dateien (A könnte aber auch D heißen? von 1 - x).
Danach Wird das Protokoll hier nach C:\TEMP\Balage.log geschrieben. Das könnte sicher auch eine Test.log oder Test.ini im Verzeichis D:\Test\ sein?
Nun zur Console. Mein Programm hat aktuell keine Konsole. Macht es Sinn oder ist es üblich, solche Prozesse in einer Konsole darzustellen? Da sieht der Anwender wenigstens, das noch was am laufen ist?
Sicher kann ich den Text auch an ein Label ausgeben? Dann gibt es aber sicher kein "WriteLine"
Finally meine alles entscheidende Frage.
Ich wollte die Funktion eigentlich mittels ButtonClick auslösen
Für mch stellt sich das komplette Werk jedoch als eine mächtige Klasse dar. (Ausnahme die drei Imports ..)
Kann man den Quelltext auseinanderdröseln dass mein Ereignis auf ButtonClick läuft?
Und habe ich deinen Code wenigstens annähernd verstanden??
Liebe Grüße Stefan -
Hallo Stefan,
leider hatte ich keine Benachrichtigung für Deinen zweite Beitrag erhalten
und sehe Deinen ausführlichen Beitrag erst jetzt, nach dem Du das Antwort-Häkchen gesetzt hast.
Ich beschränke mich meiner Antwort, da ich nicht beurteilen kann, wie weit Du alles hast nutzen können.
Aber Deine Analyse war schon ziemlich gut!
Zu Public Class DateiAblage zwei Listen anlegen muss?
Das kann sich je nach Zusammenhang zwischen Verzeichnissen und Vorlage mehrstufig gestalten.
Grundsätzlich solltest Du nicht über Variablen zugreifen, sondern über die Eigenschaften, wie ich
auch gezeigt hatte, siehe Die Prinzipien des objektorientierten Entwurfs
Damit erhälst Du mehr Flexibilität für spätere Änderungen und Anpassungen.
Zu Dieser Ablage werden dann die Verzeichnisse/Vorlagen hinzugefügt wobei mir die Bezeichnungen als "01" bzw. "A1" ... noch nicht ganz klar ist.
Die Bezeichnungen O1 A1 stehen für einen beliebigen (eindeutigen) Schlüssel,
über den Du die Verzeichnis bzw. Ablage im Programm addressieren kannst.
Wenn Du sie je Formular verwaltest, könnte da auch "Form1".. "FormNN" verwendet werden.
Verwendest Du durchgängig Ganzzahlen, könntest Du anstatt SortedList(Of String, String)
auch SortedList(Of Integer, String) verwenden - wobei Zeichenketten variabler sind.
Zu Nun zur Console. Mein Programm hat aktuell keine Konsole.
das war, wie die ganze Test-Methode nur für den Test (deshalb der Name ;-).
Du kannst anstatt dessen auch die Ausgabe von
Dim ausgabe As String = File.ReadAllText(Protokoll, Encoding.Default )
z. B. an Label/Textbox.Text zuweisen, die Du in Deinem Protokollformular anzeigst.
Zu: Ich wollte die Funktion eigentlich mittels ButtonClick auslösen
Das darfst (und sollst) Du auch: Rufe die Methode für Deine DateiAblage im Click-Handler auf.
Nur den Code solltest Du dort lassen, wo er ist, das gehört auch zu den oben erwähnten Prinzipien.
Denn so verteilt sich der Code nicht auf unterschiedlichste Formulare, sondern bleibt zentral
an der Stelle, die damit am besten umgehen kann.
Wenn noch weitere Details zu klären sind, mache einen neuen Beitrag auf.
Gruß Elmar
-
Prima, danke. Ich schaue mir das am Wochenende mal an.
Mit der Lösung dieses Problems wäre mein erstes größeres Projekt tatsächlich in allen Punkten abgehandelt.
Liebe Grüße Stefan- Als Antwort markiert Giftzwockel Montag, 10. August 2009 15:23