txt Datei mit Pfad als variable

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von FormFollowsFunction.

    txt Datei mit Pfad als variable

    Hallo zusammen,
    hab da ein Problem, such schon stundenlang im INet, aber ich kriegs nicht hin...
    Wenn ich den Text (Variable text) mit IO.File.WriteAllText("M:\Arbeitsverteilung.txt", text) speichere, ist alles ok. Nun möchte ich jedoch den Dateinamen als Variable einsetzen. Da krieg ich immer den Fehler "Das angegebenen Pfadformat wird nicht unterstützt..) Statt Arbeitsverteilung verwende ich die Variable dateiname, also versuchte ich folgendes:
    IO.File.WriteAllText("M:\" & dateiname & ".txt", text)
    Kann mir bitte jemand helfen, um mein Problem zu lösen??? Hab noch nicht viel mit VB gemacht... Vielen Dank Euch gleich mal. VG beanbear6

    Verschoben, Inline-Code-Tags eingefügt. ~Thunderbolt

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

    @beanbear6 Willkommen im Forum. :thumbup:
    Was ganz genau ist der Inhalt der Variable dateiname?
    Gib Dir die Länge der Variable aus und vergleiche diese mit der Anzahl von Zeichen, die Du zählen kannst.
    Mach mal ein dateiname.Trim().
    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!
    Hi Rod :) gleich mal vielen Dank! Ich wähle aus einer Combobox den Dateinamen aus und setzt diesen in: "M:\" & combo_name.text & ".txt" - hilft das als Angabe?
    Die Items in der Combobox sind: Arbeitsanweisung KW 05 | Arbeitsanweisung KW 06 usw.
    Gruß aus Passau
    Wenn ich IO.File.WriteAllText("M:\Arbeitsverteilung.txt", text) verwende gehts
    wenn ich IO.File.WriteAllText("M:\" & combo_name.Text & ".txt", text) verwende krieg ich diesen Pfadfehler
    wenn ich IO.File.WriteAllText("M:\" & combo_name.Text.Trim() & ".txt", text) und hier auch...

    Inline-Code-Tags eingefügt. ~Thunderbolt

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Thunderbolt“ ()

    Mache mal dies:

    VB.NET-Quellcode

    1. Dim DateiPfad As String = "M:\" & combo_name.Text & ".txt"
    2. Debug.Print "_" & DateiPfad &"_"
    3. IO.File.WriteAllText(DateiPfad, text)


    Was kommt dann beim Debug.Print raus?
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Vielen Dank wieder... Nun schreibt er: Methodenargumente müssen in Klammern stehen... ??????
    und wenn ich Print in () setzt kommt wieder der Pfadfehler
    Dim DateiPfad As String = "M:\" & combo_name.Text & ".txt"
    Debug.Print("_" & DateiPfad & "_")
    IO.File.WriteAllText(DateiPfad, text)
    ...ich verstehs nicht, es muss doch möglich sein, für den Dateipfad eine variable nutzen zu können (möchte man meinen...)
    @beanbear6 Füge diese Zeile zum Test vor Deiner Fehlerzeile ein (ändere ggf. den Pfad auf einen vorhandenen Pfad), führe dann den Code aus :

    VB.NET-Quellcode

    1. System.IO.File.WriteAllText(C:\Temp\MyTestDocument.txt", combo_name.Text)
    und hänge dann die Datei MyTestDocument.txt an Deinen nächsten Post:
    Erweiterte Antwort => Dateianhänge => Hochladen.
    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!
    Hi,
    Nun ist der Dateiname: MyTestDocument | Textinhalt: der Wert aus der Combobox

    Muss ich irgendwie IO.File deklarieren?? (wie gesagt, bin Anfänger...) :(

    Hi, i glaub i habs gefunden. Kann es sein, dass im Text Aufgabenverteilung nach KW ein : drin ist???
    Wenn ja dann werd i waaahnsinnig, i probiert über 4 Stunden an diesem blöden Fehler...

    Frage hätt ich noch: wie kann ich diesen VB Code schön einbinden?
    Dateien

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

    @beanbear6 Der Doppelpunkt : darf im Pfad nicht enthalten sein.
    ====
    System.IO wird per Default vom Studio importiert.
    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!
    @beanbear6 An der Stelle, wo DU in DEINEM Code programmiert hast, dass in der TextBox ein DOPPELPUNKT drinne steht, musst Du diesen DOPPELPUNKT entfernen.
    Feddich.
    ===
    Erzeuge im Explorer eine Datei mit dem Namen "Aufgabenverteilung_KW: 06 ab 06-Feb.txt":
    Öffne den Explorer.
    Wechsle in ein schreibbares Verzeichnis.
    Rechte Maustaste => Neu => Textdokument
    Folgendes passiert:
    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!
    Gewisse Zeichen im Datei-/Ordnername werden nicht unterstützt.
    Bei Windows sind das folgende: \ / : * ? " < > |

    Edit: Ich sollte beim nächsten mal, bevor ich Antworte, die Seite nochmal neuladen :D
    Hi, ach ja...
    nun machts auch bei mir Klick... Glaub mir, ich weiß dass im Dateinamen diese Sonderzeichen nicht sein dürfen, hab aber immer an String String und nochmal String gedacht. So kann man sich gedanklich verrennen ey... Erstmal 1000000 Dank! I hab mi dumm und dämlich gesucht. Hast ein paypalkonto? Ich möcht Dir gern kleines Dankeschön zukommen lassen... Also nochmals, 1000 Dank!!! :)
    @FormFollowsFunction Was macht Path.Combine() mit Doppelpunkten in einem Teilstring?
    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!
    ComboBoxen & Co. direkt als Platzhalter für Pfade oder sonst irgendwelche Schlüsselaufgaben quasi direkt zu nehmen – oder man müsste hier eigentlich schon den Ausdruck „missbrauchen” verwenden – ist im Grunde genommen keine gute Idee. Warum das so ist, hat dieses Beispiel im Topic schön gezeigt.
    Das gleichzeitige Erscheinen von Dummheit und Unmündigkeit nach Immanuel Kant ist eines der schlimmsten Dinge, die einem Homo sapiens in geistiger Hinsicht widerfahren können, hat manchmal aber auch durchaus seine Vorteile.

    RodFromGermany schrieb:

    Was macht Path.Combine() mit Doppelpunkten in einem Teilstring?


    Test ergab, dass Path.Combine leider keine 'verbotenen' Zeichen löscht ( : wird stumpf in den Path mit eingebaut und es kommt ein Fehler bei WriteFile etc.).
    codewars.com Rank: 4 kyu

    VB.NET-Quellcode

    1. IO.Path.GetInvalidFileNameChars
    2. IO.Path.GetInvalidPathChars


    Mit IO.Path kann man sich die unerlaubten Zeichen etc. ausgeben lassen (wie üblich - mit IntelliSense runterscrollen und sorgfältig lesen), bzw. man kann anhand dessen dann z.B. mit For-Each-Schleife alle unerlaubten Zeichen mit Text.Replace entsprechend entfernen oder killen - dazu gehören nämlich nicht nur sichtbare, sondern auch unsichtbare Steuerzeichen - beim Hineinkopieren in eine TextBox mit Strg+C und Strg+V kann der User durchaus unbeabsichtigt alles mögliche in die Pseudo-Variable einschleppen. Normalerweise macht man es mit Dateinamen umgekehrt - man vollführt eine ordentliche Synthese eines - entweder relativen oder absoluten - Pfads aus Laufwerkspräfix, Ordnern, Stamm- oder Dateiname, eigenen Zusätzen und am Ende mit einer spezifischen Erweiterung mit erlaubten, bekannten Zeichen, die beispielsweise aus einer TextBox/Zeit/Datum extrahiert werden konnten. Bei dem ganzen Prozedere muss man auch darauf achten, dass z.B. Doppelpunkt beim Laufwerk nicht nur erlaubt, sondern auch notwendig ist. Das Bereinigen eines z.B. durch den User eingetippten Pfads ist quasi eine Aktion 'von hinten durchs Auge, um nach vorne zu kommen' - also deutlich umständlicher und fehleranfälliger, was aber nicht heißt, dass es nicht machbar wäre. Je nach Betriebssystem kann sowohl / als auch \ erlaubt sein - bei Windows müsste beides gehen.
    Das gleichzeitige Erscheinen von Dummheit und Unmündigkeit nach Immanuel Kant ist eines der schlimmsten Dinge, die einem Homo sapiens in geistiger Hinsicht widerfahren können, hat manchmal aber auch durchaus seine Vorteile.

    nogood schrieb:

    wird stumpf in den Path mit eingebaut und es kommt ein Fehler bei WriteFile etc
    Genau das war die Lektion.
    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!
    Was für eine Lektion !?
    Dein Oberlerergehabe nervt ein wenig. :thumbdown:

    Was mich gewundert hat, daß IO.Path überhaupt nicht erwähnt wurde !
    @Gregor Jasinski hat es erfasst und auf den Punkt gebracht:
    txt Datei mit Pfad als variable