Illegales Zeichen im Pfad

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

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von marder9.

    Illegales Zeichen im Pfad

    Hey Leute,
    Ich verzweifele langsam bei folgenden Code Zeilen spuckt er mir Illegales Zeichen im Pfad aus.

    Visual Basic-Quellcode

    1. My.Computer.FileSystem.RenameFile(Application.StartupPath & "\launcher.exe", "launcher" & cut & ".exe")
    2. My.Computer.FileSystem.DeleteFile(Application.StartupPath & "\launcher" & akt_version & ".exe")

    Ich habe schon gegoogled was dort nicht reingehört aber es scheint alles seine Richtigkeit zu haben.
    Wo liegt der Fehler?

    marder9 schrieb:

    Wo liegt der Fehler?
    Du siehst Dir nicht an, was Du da für einen Pfad zusammengebaut hast.
    Pack den in eine separate Variable, setz nen Haltepunkt drauf und sieh ihn Dir an.
    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!
    Mir würden Zwei dinge einfallen die du machen könntest. Lass dir mal den Pfad in einer Label oder etwas ähnlichem ausgeben und schau nach was dort im Pfad versteckt ist z.B. vbLf wie @v-go schon geschrieben hat oder du
    lässt dein Programm die von Windows schon nicht erlaubten Zeichen entfernen.

    Hier mal eine beispiel Funktion:

    VB.NET-Quellcode

    1. 'Von Windows nicht erlaubte Zeichen: <>:"\/|*?
    2. 'In VB.NET kannst du statt des " Zeichen auch Chr(34) benutzen
    3. Private Function deleteIllegalChr(ByVal strText As String, ByVal strIllegalChr As String)
    4. For i = 0 To strIllegalChr.Length - 1
    5. If strText.Contains(strIllegalChr.Chars(i)) Then
    6. strText = strText.Replace(strIllegalChr.Chars(i), "_")
    7. End If
    8. Next
    9. Return strText
    10. End Function


    MfG
    Conway's Game Of Life Monogame Sample: 80%

    Conway's Game Of Life Monogame Sample

    TheTrust3343 schrieb:

    nicht erlaubten Zeichen entfernen
    ist doch wohl Tinnef.
    Primär muss er dafür sorgen, dass keine unerlaubten Zeichen reinkommen, und dazu muss er feststellen, wo in seinem Programm welche falschen Zeichen reinkommen.
    Da muss man debuggen lernen, gugst Du hier, nicht aber Aufräumfunktionen schreiben.
    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!

    RodFromGermany schrieb:

    Da muss man debuggen lernen, gugst Du hier, nicht aber Aufräumfunktionen schreiben.

    Das man debuggt ist ja logisch und wie das geht weiß ich ;)
    Aber wenn man mal annimmt das dieses Programm nicht nur für die Eigennutzung bestimmt ist und man die Variablen durch eine Textbox oder sonstiges verändern kann, dann sollte er dafür sorgen das keiner der Benutzer diese Zeichen benutzt. Entweder durch diese "Aufräumfunktion" oder durch eine Überprüfung ob diese Zeichen enthalten sind -> Wenn ja dann dem Benutzer eine Meldung geben oder so etwas.
    Conway's Game Of Life Monogame Sample: 80%

    Conway's Game Of Life Monogame Sample
    Also erstmal danke für die ganzen Antworten.
    Ich schneide in der Cut Variable, alle Punkte weg daran lag es also nicht, aber als ich das Label meine Variable ausgeben lies stand dort: [Pfad]launcher.exewird abgerufen.exe.
    Das schneide ich jetzt weg und vielen Dank :D
    Ok hat sich doch nicht gelöst habe mit

    Visual Basic-Quellcode

    1. catch ex as Exception​
    den Fehler mir ausgeben lassen.
    Vorher die versuchte Vorgehens-Weise:
    Vorher war es der Falsche Pfad den ich versuchte hiermit zu fixen:

    Visual Basic-Quellcode

    1. ​Dim cut As String = new_version
    2. cut = cut.Replace(".", "")
    3. Dim LI As Integer = cut.LastIndexOf("launcher.exe")
    4. cut = cut.Substring(0, LI)
    5. My.Computer.FileSystem.RenameFile(Application.StartupPath & "\launcher.exe", "launcher" & cut & ".exe")

    So jetzt sagt er mir in meinem output meiner catch ex as Exception:
    System.ArgumentOutOfRangeExeption: Die Länge darf nicht kleiner als 0 (null) sein.
    Vlt. könntet ihr mir Tipps geben, wie ich während mein Programm läuft, es umzubennen im Format: launcher[Version].exe
    und die alte zu löschen.

    Vlt. könntet ihr mir Tipps geben, wie ich während mein Programm läuft, es umzubennen im Format: launcher[Version].exe
    und die alte zu löschen.

    Garnicht so lange deine Anwendung läuft.


    Für den Dateinamen würde ich String.Format verwenden.

    VB.NET-Quellcode

    1. Dim strLauncher As String = String.Format("launcher_{0}.exe", new_version.Replace(".", ""))



    Edit:
    Ps: Die Exception ist ziehmlich logisch, du entfernst aus der Variable cut alle Punkte. Eine Zeile später suchst du nun nach dem letzten vorkommen von luncher.exe selbst wenn die Variable new_version in etwa so aussehen würde 1.x.x.x_launcher.exe könnte das letzte vokommen von luncher.exe nicht gefunden werden. Da alle Punkte entfernt wurden, LI ist also 0.

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

    Definiere

    marder9 schrieb:

    der Falsche Pfad
    Was ganz genau übergibst Du als 1. Parameter an die Prozedur RenameFile?

    RodFromGermany schrieb:

    Pack den in eine separate Variable, setz nen Haltepunkt drauf und sieh ihn Dir an.
    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!
    Als 1 Parameter wird der Pfad zum Launcher angegeben.
    Mein Vorhaben:
    In Arbeit :Einen Minecraft Launcher für unsere Community (Modpack)
    Todo: Er soll Changes an den Dateien auf meinem Server erkennen und nur die Changes auf die Clients Automatisch updaten. (Wenn einer dabei noch Tipps geben könnte)
    An diesen beiden Sachen muss noch getüfftelt werden vorallem weil ich die minecraft.jar nicht starten kann (früher ging es aber die Datei Struktur hat sich massiv geändert).(Wenn einer dabei noch Tipps geben könnte)
    So jetzt aber in diesem Thread worum es geht ich wollte nach dem Update des Clients ihn renamen und den alten löschen während ich den neuen starte.