Nullreferenz beim auslesen von Datei in List of string

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Perillio.

    Nullreferenz beim auslesen von Datei in List of string

    Moin,

    habe ein kleines Problem mit dem auslesen einer Datei um daraus dann später MD5 Hashes errechnen zu lassen.
    Funktion:

    - Textdatei mit Liste von Dateien im Programmordner wurde erstellt.
    - Textdatei soll in eine List of String gelesen werden
    - Jede dort drin befindliche Datei soll einen MD5-Hash bekommen.

    An der stelle, wo ich die Datei einlesen möchte, bekomme ich aber eine Nullreferenz.

    Hier der Teil meines codes, der dies hervorbringt. Die Nullreferenz ploppt bei Zeile 2 (Helplist.addrange...) auf:

    VB.NET-Quellcode

    1. If My.Computer.FileSystem.FileExists("UpProFL.dat") Then
    2. HelpList.addrange(IO.File.ReadAllLines(".\UpProFL.dat"))
    3. For Each Zeile In HelpList
    4. Dim Datei As String
    5. Datei = MD5hash(System.IO.File.ReadAllBytes(Zeile))
    6. HashList.Add(Datei)
    7. Next


    Anmerkung: Die Datei ist vorhanden und auch nicht leer. Es steht der komplette Pfad, sowie der Dateiname in je einer Zeile.

    Bin für jeden Hinweis dankbar ^^
    @Perillio Klar, Du versuchst Dateien mit demselben Namen in unterschiedlichen Verzeichnissen einzulesen:

    VB.NET-Quellcode

    1. "UpProFL.dat"

    VB.NET-Quellcode

    1. ".\UpProFL.dat"
    Mach Dir eine String-Variable, wo Du den Dateinamen reinschreibst, und verwende diese Variable.
    So ist gesichert, dass Du stets dieselbe Datei ansprichst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Eigentlich sollte aber .\datei und nur datei das selbe sein. Der einzelne punkt heisst ja im Prinzip "im aktuellen Verzeichnis".

    Habe es gerade mal versucht, ohne den Punkt laufen zu lassen (also ...readalllines("UpProFL.dat")) aber die Nullreferenz bleibt. Nochmal extra nachgesehen, die Datei ist auch im Verzeichnis und nicht leer.
    Dann füg ein paar Zwischenschritte ein.
    Anstatt das Ergebnis von ReadAllLines direkt zu verarbeiten, weise das einem String Array zu und schau dir den Inhalt an.
    Nebenbei, ich wette HelpList ist nicht initialisiert.
    Ich würde sagen mit

    VB.NET-Quellcode

    1. Dim HelpList as List(of string)
    sollte sie eigentlich initialisiert sein.

    Habe mir ein Array namens test erstellt und das ganze dort rein gelesen, er sagt aber trotzdem beim Verarbeiten es wäre eine NullReferenz.

    VB.NET-Quellcode

    1. If My.Computer.FileSystem.FileExists(FileListFile) Then
    2. test = IO.File.ReadAllLines(FileListFile)
    3. For Each Wert In test
    4. HelpList.Add(Wert)
    5. Next
    6. For Each Zeile In HelpList
    7. Dim x As String
    8. x = MD5hash(System.IO.File.ReadAllBytes(Zeile))
    9. HashList.Add(x)
    10. Next
    11. ...


    Wenn ich mit der Maus im Debugmodus über Wert fahre, zeigt er mir aber brav die erste Datei, die in der FileList drin steht. Die Frage, die sich mir da gerade stellt ist, ob es denn eine exe Datei (Die steht an erster Stelle in der Filelist) überhaupt mit ReadAllLines lesen kann. Müsste man hier nicht eher binär einlesen ? Kann es dadurch zu diesem Fehler kommen, weil es damit eventuell einfach nichts anfangen kann ?

    Wobei ist auch Quatsch, er soll ja nur die Namen in die Liste schreiben.
    Hmm. Habe es mal mit rein gesetzt, bleibt aber das gleiche Ergebnis.

    @EaranMaleasi
    Danke für die genaue Erklärung :)

    UPDATE: Es läuft jetzt. Das new war tatsächlich die Lösung. Habe es dem test Array dazugesetzt und jetzt funktioniert es.
    Vielen dank, ihr seid echt die besten :)