Leere XML-Datei

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Leere XML-Datei

    Hallo.

    Mein Programm soll durch alle Dateien in dem Ordner wo es ausgeführt wird durchgehen, sich den jeweiligen Dateinamen & MD5Hash merken und in eine XML schreiben.
    Das ganze funktioniert allerdings noch nicht so wie ich will.

    Hier mal mein Quellcode:

    VB.NET-Quellcode

    1. Dim sPath As String = Application.StartupPath
    2. ' Directory-Object erstellen
    3. Dim oDir As New System.IO.DirectoryInfo(sPath)
    4. ' alle Dateien des Ordners
    5. Dim oFiles As System.IO.FileInfo() = oDir.GetFiles()
    6. ' Datei-Array durchlaufen und in
    7. ' ListBox übertragen
    8. Dim oFile As System.IO.FileInfo
    9. ' Auswahl einer Kodierungsart für die Zeichenablage
    10. Dim enc As New System.Text.UnicodeEncoding
    11. ' XmlTextWriter-Objekt für unsere Ausgabedatei erzeugen:
    12. Dim XMLobj As Xml.XmlTextWriter _
    13. = New Xml.XmlTextWriter("patchlist.xml", enc)
    14. ' Formatierung: 4er-Einzüge verwenden
    15. XMLobj.Formatting = Xml.Formatting.Indented
    16. XMLobj.Indentation = 4
    17. XMLobj.WriteStartDocument()
    18. XMLobj.WriteStartElement("Patchlist")
    19. MsgBox(sPath)
    20. If sPath.EndsWith("\") And sPath.Length > 3 Then
    21. sPath = sPath.Substring(0, sPath.Length - 1)
    22. End If
    23. For Each oFile In oFiles
    24. XMLobj.WriteStartElement("FILE")
    25. XMLobj.WriteAttributeString("filename", oFile.Name)
    26. XMLobj.WriteAttributeString("md5val", MD5FileHash(sPath & "\" & oFile.Name))
    27. XMLobj.WriteEndElement()
    28. Next
    29. XMLobj.WriteEndElement()
    30. XMLobj.Flush()
    31. XMLobj.Close() ' Document


    Durch meinen Log ist mir aufgefallen, dass das Programm noch vor der For-Schleife aufhört und einfach eine leere XML-Datei erstellt.

    Wäre über Ratschläge dankbar, bin grad Ideenlos woher das kommen könnte

    VisualBasicNoob schrieb:

    Durch meinen Log ist mir aufgefallen, dass das Programm noch vor der For-Schleife aufhört

    Sowas sollte dir nicht durch Log, sondern durch das Debuggen auffallen.
    Wenn das Programm die For-Schleife nicht ausführt, dann scheint in oFiles nichts drin zu sein... Wenn du Haltepunkt da machst und es dir anschaust, wirst du es merken. Anscheinend hast du da keine Dateien.
    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt

    Ich habe zwei Projekte die beide eine XML Datei erstellen aber vom Aufbau ein bisschen anders sind. Bei der anderen Methode funktioniert das ohne Probleme. Und der Ordner ist gefüllt mit Testdateien.
    BTW: Wie soll mir das beim debuggen auffallen wenn alles (scheinbar) ohne Probleme läuft? Dafür habe ich ja noch die Logs paralell laufen, um fehler hinter der Fassade zu finden.

    €dit: Folgendes erscheint im Direktfenster:

    Quellcode

    1. Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in quickpatchgen.exe aufgetreten.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt


    Ich habe vor der Schleife 3 Messageboxen plaziert um mir den jeweiligen Inhalt auszugeben:

    VB.NET-Quellcode

    1. MsgBox(sPath)
    2. MsgBox("oFile: " & oFile.Name & vbCrLf & "oFiles" & oFiles.ToString)
    3. MsgBox(oDir)

    Die erste MSGBox wird ausgeführt dannach hört er auf. Zwischen den Msgboxen ist kein weiterer Quellcode, das kann eigentlich nicht sein das er da einfach aufhört oder?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Rede ich Chinesisch? :rolleyes:

    Was sollen die MessageBoxen??? Mach dir einen Haltepunkt und gehe Schritt für Schritt durch, dann siehst du, was passiert.

    Rufst du zufällig das Ganze in FormLoad-Event auf? Da kann sowas passieren, dass bei einer Exception das Programm sich einfach klammheimlich verabschiedet.

    Und was soll oFiles.ToString sein? oFiles ist doch ein Array, wird es so ausgeführt? Ansonsten, dein oFile ist doch VOR der Schleife noch Nothing, der Wert wird erst IN der Schleife zugewiesen. Du kannst keine Name-Eigenschaft von Nothing abrufen, deswegen fliegt es dir um die Ohren (außer im FormLoad-Event, da ist es ab und zu einfach weg, wie bei dir jetzt).
    @VisualBasicNoob Was soll das hier:
    Ansonsten funktioniert Dein Code.
    Bilder
    • Path.png

      5,8 kB, 657×79, 154 mal angesehen
    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!
    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt



    1. Die Messageboxen dienen lediglich wie die Logfiles um zu schauen wo das Programm hinkommt und wo es abraucht. Das oFiles ein Array ist weiß ich ebenfalls, habe das aber einfach mal drinngelassen.
    2. Ja es war in meinem Load-Event, hab es jetzt mal umgepackt und bekomme schon eine genauere Information, danke dafür.

    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt

    Da fehlt dir ein "\" Backslash, dieser wird entfernt um eine Exception zu vermeiden

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt


    Ich bin kein Microsoft-Fan, in Eclipse, bzw. Java kann man direkte Logfiles erstellen. Wie das ganze bei MSVB gehen soll weiß ich nicht, also greif ich nach der Messagebox. Die soll mir ja keine Fehler ausgeben sondern regelrecht zeigen bis wo hin das Programm kommt. Und ich finde jeder darf entwickeln wie er will, man muss sich nicht immer an Styleguides etc halten wenn es nur um kleine Tools geht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Mir fehlt da nix.

    VisualBasicNoob schrieb:

    Da fehlt dir
    der richtige Code.
    Hättest Du selbst merken können, hättest Du die MessageBox nach diesem Code ausgegeben, nicht aber vorher.
    ---
    LogFiles kannst Du so machen:

    VB.NET-Quellcode

    1. IO.File.AppendAllText("c:\Temp\Log.txt", "LogInhalt" & Environment.NewLine)

    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!
    Hä? Debuggen ist ein essentieller Bestand der Programmierung. Dass VS dir so ein bequemes Durchsteppen anbietet, ist ein großer Segen (wie soll man sonst Fehler in einem komplexen Programm suchen??) und kein "Stylequide".
    Ich habe noch mit Piepsern debuggt (die Controllerplatine hatte nicht mal serielle Schnittstelle, so dass man keinen Text zum Debuggen schicken konnte, nur ein Soundmodul, eine Funktion hat dann ein Piepser verursacht, eine andere 2 usw, und ich habe wie blöd gezählt und aufgeschrieben, um den Ablauf nachzuvollziehen). Und ihr verschenkt so eine geniale Möglichkeit und gurkt mit MessageBoxen rum (ist eine Krücke, weil du nur einen Bruchteil sehen kannst).

    @RodFromGermany
    Er meint, dass der Editor hier Backslashes verschluckt (habe ich schon häufiger mitgekriegt), seine Abfrage soll also .EndWith("\") lauten.
    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt


    Und damals als ich noch Jung war hab ich mir mit Lochkarten den Ar*** abgewischt, wen interessierts? Jeder kann das machen wie er will. Die einen machen es so die anderen so.
    BTT: Habe das Problem jetzt gefunden und behoben, danke für die hilfe (abgesehen vom ankreiden meines Debugging-Stils)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Gut, dann merke ich mir, dass man für dich keine Fehler suchen braucht. Würdest du debuggen, würdest du die selbst finden. So musste ich meinen Verstand bemühen, um festzustellen, was bei dir schief gehen könnte. Hellsehen, quasi. Du hättest es in 30 Sekunden bequem ablesen können. :rolleyes:

    Oder mit anderen Worten: "Der Name ist Programm". Dein Nick ist ja nicht umsonst so gewählt...
    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt

    In der Tat hätte ich mir viel Zeit und Nerven sparen können, allerdings war mir nicht bewusst das sowas im Load-Event passieren kann.
    €: Natürlich kann man mir beim Suchen helfen, ich versuche schließlich auch zu helfen, nur das ankreiden irgendwelcher Sachen (die jeder machen kann wie er will) passt mir nicht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    VisualBasicNoob schrieb:

    Die einen machen es so die anderen so.
    Dann solltest Du weiter mit dem Holzroller zum Programmierer-Werden-Woller-Rentner-Treff fahren. ;(
    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!
    Dan fang an zu debuggen!

    sonne75 schrieb:

    Debuggen ist ein essentieller Bestand der Programmierung. Dass VS dir so ein bequemes Durchsteppen anbietet, ist ein großer Segen (wie soll man sonst Fehler in einem komplexen Programm suchen??) und kein "Stylequide".
    Ich Antworte nach bestem Wissen und Gewissen. Ich übernehme keine Garantie für die Richtigkeit oder Fehlerfreiheit meiner Texte.


    Ich konnte dir helfen?
    - Das ist schön :) Ich würde mich über ein "Hilfreich" freuen ^^