C# "Illegales Zeichen im Pfad"?
Hallo Community!
Folgendes Problem: Ich arbeite derzeit an einem Chatprogram und der Server sendet einen Befehl, bsp.: "/sendHistory E:\DB\GChat\History\History.txt" . Dieser Text kommt dann als String an. Der String wird gesplitted in "/sendHistory" (command) und "E:\DB\GChat\History\History.txt" (argument). Das Argument wird in einer Textbox zwischengespeichert, und eine neue Methode wird ausgeführt: SendMailHistory. In der Methode steht ein ganz normales Mailscript mit Anhang drinnen (funktioniert auch wenn man selbst den Text in die Textbox eingibt). Allerdings speichert ja das Programm selbst das argument in die Textbox und wenn ich dann das Mailscript ausführe, kommt als Fehler "Illegales Zeichen im Pfad", was mache ich falsch? Habe bis jetzt schon alles ausprobiert was mir einfällt(Methode mit arg, argument nach falschen angaben durchsucht,..) Der Code läuft immer durch wenn sich im Chatfenster (listbox) ein neues Item hinzugefügt wird.
Code: https://ghostbin.com/paste/ep3ev
Danke an alle im voraus! P.s. Der der es richtig hat kriegt die "Hilfreichste Antwort".
Gruß!
1 Antwort
Du musst möglicherweise den Backslash escapen, also "\" durch "\\" ersetzen, hierfür sollte es eine fertige Funktion geben
Dass Du hiermit "P.s. Der der es richtig hat kriegt die "Hilfreichste Antwort"." gegen die GF-Regeln verstößt, ist Dir bekannt? ;)
Hieraus:
E:\DB\GChat\History\History.txt
MUß (!) innerhalb Deines Codes das:
E:\\DB\\GChat\\History\\History.txt
werden, wenn Du mit File-Operationen darauf arbeiten möchtest. Der "\" escaped das nachfolgende Zeichen. Wenn dort also z.B. ein Doppelpunkt steht, wird daraus die Escape-Sequenz "\:" - und das KANN kein valider Dateiname mehr sein.
Du sollst Deiner Software ja auch nicht das "\\" füttern, sondern den Parameter für den relevanten Dateisystems-Zugriff escapen. Wenn das von "draußen", also als Parameter, so reinkommt, dann muss das nicht zwingenderweise zum selben Ergebnis führen.
eine andere Möglichkeit wäre, dass Du am Ende (!) des Arguments noch ein \r\n drinstehen hast (also quasi das "Return"-Zeichen, das Du mitschickst, wenn Du den Befehl absetzt.) - hier hilft Dir das trimmen des Arguments.
Geht immernoch nicht, kann es vielleicht sein, dass die Textboxen ja sozusagen in dauerschleife gefüllt werden, immer wenn ein neues Item ankommt, und die aktion irgendwie unterbrochen werden muss?
Umm, mach es Dir doch nicht so kompliziert - natürlich muss man beim Programmieren manchmal solche Ideen "durchspinnen", aber am Ende des Tages ist die schnellste Lösung bei sowas immer noch: Breakpoint im Code setzen und sich das Ganze dann im Debugger anschauen - da wird's dann normalerweise sofort klar, was das Problem ist.
Alternativ: Debug-Output auf die Konsole rausschreiben, überall da, wo es Sinn machen könnte. Das nennt sich "printf-Debugging", Google verrät Dir mehr :)
Auch schon probiert. gebe praktisch nur den Pfad ein, auch mit einem @davor.