Announcement

Collapse
No announcement yet.

Was läuft da schief?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Was läuft da schief?

    Hallo Leute! Ich ba ein kleines Problem vielleicht will mir damit wer helfen?

    folgender Code soll einen Ordner erstellen in diesem Ordner eine Textdatei erstellen und die Information von Textbox1.text in dieser Textdatei abspeichern:


    Code:
    ' Abspeichern
            ' --- Ordner Erstellen
            Dim d As New DirectoryInfo(TextBox13.Text & ComboBox1.Text & "\")
    
            Dim fi As New FileInfo("\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt")
    
            d = New DirectoryInfo(TextBox13.Text & ComboBox1.Text & "\")
    
            ' --- Verzeichnis erzeugen
            d.Create()
            If fi.Exists = False Then
                fi.Create()
            End If
           
            If Not ListBox1.Text = "" Then
                Try
                    Dim fileno As Integer, filename As String
                    fileno = FreeFile()
                    FileOpen(fileno, TextBox13.Text & ComboBox1.Text & "\" & "\" & "\Daten_" & ComboBox1.Text & "_" & ListBox1.Text & ".txt", OpenMode.Output, OpenAccess.Write, OpenShare.LockWrite)
    
                    PrintLine(fileno, TextBox1.Text)
    das Funktioniert Tadellos
    Es wird der Ordner erstellt (C:\Programme\Gasolin\2009)
    es wird die Textdatei in diesem Ordner erstellt (C:\Programme\Gasolin\2009\Daten_2009_Opel.txt)
    und die Daten von TExtbox1.text werden auch in der Textdatei gespeichert
    Aber eines passiert noch und das will ich nun gar nicht:
    Die Textdatei wird ein 2. mal erstellt und zwar hier: (G:\Daten_2009_Opel.txt)
    Wie ist das möglich???? Und warum gerade auf Platte "G" Woher hatt er diese Information?
    Beim Duplicat (auf der "G" Platte) werden die Daten von Textbox1.text nicht gespeichert!
    Was läuft den hier Schief?
    Gruß Jürgen

  • #2
    Hallo Jürgen,

    in der SDK-Doku/MSDN steht, dass mit new FileInfo (dem zweiten Befehl in deinem Ausschnitt) "eine vorhandene Datei geöffnet bzw. eine Datei erstellt" wird. Da dort kein Pfad angegeben ist, wird das aktuelle Arbeitsverzeichnis genommen, und das steht (warum auch immer) auf G:\

    Der Inhalt wird erst später durch FileOpen geschrieben; dort wird zusätzlich der Pfad benutzt. Also wird das richtig ausgeführt.

    Aber du arbeitest viel zu umständlich! Für die Namen von Pfad und Datei solltest du einfache String-Variable benutzen; die kommen schließlich mehrfach vor. Für einfache Operationen wie Exists und Create gibt es bei Dateien die statischen Methoden der File-Klasse, bei Verzeichnissen analog die Directory-Klasse. FileInfo und DirectoryInfo sind nur dann nötig, wenn zusätzliche Informationen (Größe, Datum/Zeit) benötigt werden, die es durch File/Directory nicht gibt.

    Zum Speichern habe ich dich schon zweimal in der letzten Woche auf File.WriteAllXxx hingewiesen. Aber wenn du das nicht hören willst

    Jürgen

    PS 1. gfoidl hat wirklich recht: Lass dir bessere Überschriften einfallen, sodass das Problem von vornherein klar wird.

    PS 2. Namen wie TextBox13 gehören verboten! Da weißt nach spätestens 14 Tagen auch du nicht mehr, wozu diese eine TextBox da ist. Aussagekräftige Namen sind gefordert! (Wenn du, wie in der anderen Frage, wirklich eine spezielle Reihenfolge brauchst, gibt es andere Möglichkeiten wie eine List<string>, die sich die Namen der speziellen TextBoxen merkt.)
    Zuletzt editiert von Jürgen Thomas; 14.10.2009, 16:27.

    Comment


    • #3
      Hallo Jürgen
      Zum Speichern habe ich dich schon zweimal in der letzten Woche auf File.WriteAllXxx hingewiesen. Aber wenn du das nicht hören willst
      Da ich ein absoluter Anfänger bin ist das nicht so einfach für mich! Ich hab mich total gefreut das das Speichern geklappt hatt - jetzt wieder in ein Teritorium vorstossen wo ich mich wieder nicht auskenn wo ich euch hier im Forum wieder stören müsste wollte ich dan nicht!

      Leider brauch ich für alles Codeschnipsel
      gebs auch zu bin ein Notorischer "Kopierer"

      Comment


      • #4
        Och Ich verzweifle noch:

        Hab den Code geändert (Hab den Pfad in "Newfileinfo") angegeben:
        Code:
        ' Abspeichern
                ' --- Ordner Erstellen
                Dim d As New DirectoryInfo(Form1.TextBox13.Text & Form1.ComboBox1.Text & "\")
        
                Dim fi As New FileInfo(Form1.TextBox13.Text & Form1.ComboBox1.Text & "\Fahrzeuge" & ".txt")
                Dim fi2 As New FileInfo(Form1.TextBox13.Text & Form1.ComboBox1.Text & "\" & TextBox1.Text & ".txt")
                d = New DirectoryInfo(Form1.TextBox13.Text & Form1.ComboBox1.Text & "\")
        
                ' --- Verzeichnis erzeugen
                d.Create()
                If fi.Exists = False Then
                    fi.Create()
                End If
                If fi2.Exists = False Then
                    fi2.Create()
                End If
                Try
                    Dim fileno As Integer, filename As String
        
        
                    fileno = FreeFile()
        
                    FileOpen(fileno, Form1.TextBox13.Text & Form1.ComboBox1.Text & "\" & "\Fahrzeuge.txt", OpenMode.Output, OpenAccess.Write, OpenShare.LockWrite)
                    For Each Item As Object In Form1.ListBox1.Items
        
                        PrintLine(fileno, Item.ToString)
                    Next
                    FileClose(fileno)
                    FileOpen(fileno, Form1.TextBox13.Text & Form1.ComboBox1.Text & "\" & "\" & TextBox1.Text & ".txt", OpenMode.Output, OpenAccess.Write, OpenShare.LockWrite)
                    PrintLine(fileno, TextBox1.Text)
        Jetzt wird die Textdatei dort und nur dort abgespeichert wo ich will!
        Leider wird jetzt plötzlich der Inhalt der Textbox nicht mehr in der Textdatei abgespeichert - sprich sie ist leer!
        Was mach ich den jetzt wieder falsch?

        Comment


        • #5
          Originally posted by vierkant View Post
          ... - jetzt wieder in ein Teritorium vorstossen wo ich mich wieder nicht auskenn wo ich euch hier im Forum wieder stören müsste ...

          Leider brauch ich für alles Codeschnipsel
          Du solltest dir angewöhnen, selbst in der SDK-Doku/MSDN nachzulesen. Es hat schon seinen Grund, dass ich das so hervorhebe.

          * Schreib im Editor File.WriteAllText, markiere das und drücke F1.
          * Oder gehe über msdn und die betreffende Klasse zur Erklärung (dort fehlt leider der Index)
          * Oder über Hilfe - Index

          Fast überall gibt es ausführliche Beschreibungen und Beispiele. Was ist so schlimm daran, 10 Zeilen Code durch einen einzigen Befehl zu ersetzen, wenn er direkt vorgesetzt wird.

          gebs auch zu bin ein Notorischer "Kopierer"
          Ich hoffe, dass du wenigstens mitdenkst und verstehst, was du kopierst.

          Hast du angefangen, dich konsequent einzuarbeiten? Beispielsweise durch openbook VB

          Jürgen

          PS. Ach je, jetzt kommt ein neuer Versuch. Ich speichere meine Hinweise erstmal.

          PS 2. Du benutzt dieselbe fileno für zwei verschiedene FileOpen-Arbeiten. Das kommt mir sowieso komisch vor. Aber ich sagte schon: Ich habe von VB keine Ahnung. Mit den File-Methoden wäre es jedenfalls viel, viel einfacher.
          Zuletzt editiert von Jürgen Thomas; 14.10.2009, 18:01.

          Comment


          • #6
            Hi Jürgen - ich hab das jetzt einigermasen kapiert!
            Mit folgendem Code Speichere ich jetzt ab:
            Code:
            ' Abspeichern von Datenblatt
                    ' --- Ordner Erstellen
            
                    Dim path As String = Form1.TextBox13.Text & Form1.ComboBox1.Text & "\" & "\" & TextBox1.Text & ".txt"
            
                    ' This text is added only once to the file.
                    If File.Exists(path) = False Then
                        Dim fileno As Integer, filename As String
                        fileno = FreeFile()
                        FileOpen(fileno, Form1.TextBox13.Text & Form1.ComboBox1.Text & "\" & "\" & TextBox1.Text & ".txt", OpenMode.Output, OpenAccess.Write, OpenShare.LockWrite)
                        PrintLine(fileno, TextBox1.Text)
                        PrintLine(fileno, TextBox2.Text)
                        PrintLine(fileno, TextBox3.Text)
                        PrintLine(fileno, TextBox4.Text)
                        PrintLine(fileno, TextBox5.Text)
                        PrintLine(fileno, TextBox6.Text)
                        PrintLine(fileno, TextBox7.Text)
                        PrintLine(fileno, TextBox8.Text)
                        PrintLine(fileno, TextBox9.Text)
                        PrintLine(fileno, TextBox10.Text)
                        PrintLine(fileno, TextBox11.Text)
                        PrintLine(fileno, TextBox12.Text)
                        PrintLine(fileno, DateTimePicker1.Text)
                        FileClose(fileno)
                        ' Abspeichern ENDE
                    End If
                    Me.Close()
            Funktioniert super!
            Aber wenn die Datei bereits existiert wird sie nicht überschrieben! Hast du ne Ahnung wie ich das ändern kann?
            Besten Dank für deine Geduld
            Gruß Jürgen

            Comment


            • #7
              Jetzt hab ichs!
              Hier der Richtig Funktionierende Code:
              Code:
              ' Abspeichern von Datenblatt
                      ' --- Ordner Erstellen
              
                      Dim path As String = Form1.TextBox13.Text & Form1.ComboBox1.Text & "\" & "\" & TextBox1.Text & ".txt"
              
                      ' This text is added only once to the file.
                      If File.Exists(path) = False Then
                          Dim createText As String = Form1.TextBox13.Text & Form1.ComboBox1.Text & "\" & "\" & TextBox1.Text & ".txt"
                          File.WriteAllText(path, createText)
                      End If
                      Dim fileno As Integer, filename As String
                      fileno = FreeFile()
                      FileOpen(fileno, Form1.TextBox13.Text & Form1.ComboBox1.Text & "\" & "\" & TextBox1.Text & ".txt", OpenMode.Output, OpenAccess.Write, OpenShare.LockWrite)
                      PrintLine(fileno, TextBox1.Text)
                      PrintLine(fileno, TextBox2.Text)
                      PrintLine(fileno, TextBox3.Text)
                      PrintLine(fileno, TextBox4.Text)
                      PrintLine(fileno, TextBox5.Text)
                      PrintLine(fileno, TextBox6.Text)
                      PrintLine(fileno, TextBox7.Text)
                      PrintLine(fileno, TextBox8.Text)
                      PrintLine(fileno, TextBox9.Text)
                      PrintLine(fileno, TextBox10.Text)
                      PrintLine(fileno, TextBox11.Text)
                      PrintLine(fileno, TextBox12.Text)
                      PrintLine(fileno, DateTimePicker1.Text)
                      FileClose(fileno)
                      ' Abspeichern ENDE
              Danke für die Hilde!
              Ohne dich hatte ich keine Chance

              Comment


              • #8
                Hallo,

                hast du schon gehört dass es Schleifen gibt?


                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment

                Working...
                X