Zum Inhalt springen

string mit doppeltem hochkomma (") richtig escapen - aber wie?!


diditwithook

Empfohlene Beiträge

  • Antworten 54
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

fertiges sArgument mit einer Messagebox ausgegeben:

"C:\Dokumente und Einstellungen\User\Desktop\input.csv" "C:\Dokumente und Einstellungen\User\Desktop\output.csv"

im debugger unter locals:

sArgument: "\"C:\\Dokumente und Einstellungen\\User\\Desktop\\input.csv\" \"C:\\Dokumente und Einstellungen\\User\\Desktop\\output.csv\""

(äusersten ") bei jeder variable vorhanden...

Bearbeitet von diditwithook
Link zu diesem Kommentar
Auf anderen Seiten teilen

unhandled exception ^^
Dann häng dich doch bitte mit dem Debugger dran, und sieh nach, was genau passiert. Mit "unhandled exception" allein kann man nichts anfangen, ob mit oder ohne ^^.

Und bist du wirklich sicher, dass das richtige programm.exe gestartet wird, und nicht eine alte Version, die noch irgendwo rumliegt? Gib beim Starten bitte mal einen absoluten Pfad zur Exe an.

Link zu diesem Kommentar
Auf anderen Seiten teilen

soweit ich jetzt bin DENKE ich mir das bei

string sArguments = "\"" + sInputPfad + "\"";

System.Diagnostics.Process.Start("programm.exe", sArguments);

sArgument nicht richtig interpretiert wird, wenn ich "\"" bei sInputpfad hinzufüge bekomme ich kein fehler wenn ich einen pfad ohne leerzeichen habe, nur bei einem pfad mit leerzeichen, sprich "\"" sollte funktionieren, wobei dann mein problem ist wie schaffe ich es einen pfad mit leerzeichen zu übergeben +grml+

Bearbeitet von diditwithook
Link zu diesem Kommentar
Auf anderen Seiten teilen

ich versuche deine fragen so gut wie möglich zu beantworten, ich kann nicht mehr wie programm.exe mit diesen parametern zu starten, und sehe dann das wenn ich "pfad mit leerzeichen" als parameter übergebe es funktioniert, ohne " nicht - das ist mir klar da er die parameter anhand der leerzeichen trennt :/

übergebe ich unter properties die command line arguments "pfad mit leerzeichen" funktioniert es tadellos, doch speichere ich den pfad mit


string str = "\"" + strpfadmitleerzeichen + "\"";

ab funkioniert es nicht, bin dann aber wie schon erkläft drauf gekommen dass dies so trotzdem funktioniert wenn ich so einen pfad ohne leerzeichen abspeichere, SOLLTE doch das selbe sein ...

Bearbeitet von diditwithook
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hatte dich gebeten, dich mit dem Debugger an programm.exe ranzuhängen, damit wir ein wenig mehr Informationen als "unhandled exception ^^" bekommen. Was ist dabei herausgekommen?

starte ich programm.exe über die winform wo ich die

argumente wie folgt abspeichere funktioniert es nicht:

string sInputPfad = textBox1.Text;

string sOutputPfad = textBox2.Text;


string sArguments = sInputPfad + " " + sOutputPfad;

System.Diagnostics.Process.Start("programm.exe", sArguments);
funktioniert auch nicht wenn ich die pfad auf eine der folgenden arten abspeichere:
string sInputPfad = char.ConvertFromUtf32(34) + textBox1.Text + char.ConvertFromUtf32(34);
oder
string sInputPfad = "\"" + textBox1.Text + "\"";
oder
string sInputPfad = (Char)34 + textBox1.Text + (Char)34;
habe mir dann die pfade ausgeben lassen und programm.exe mit diesen strings gedebuggt (versuch 1-3). problem ist ja wenn ich mir nach
string sInputPfad = "\"" + textBox1.Text + "\"";
den pfad ausgebe bekomme ich "pfad mit leerzeichen", habe es auch mit den pfaden die ich aus den locals in diesem moment rauskopiert habe versucht(im win form programm), aufwerfen tut es mich dann bei
StreamReader StreamReader = new StreamReader(sPfad);

im programm.exe

wobei sPfad dein inputpfad darstellt.

Fehlermeldung: Datei sPfad konnte nicht gefunden werden.

versuch1:

im debugger die command line arguments:

"C:\Dokumente und Einstellungen\User\Desktop\input.csv"

"C:\Dokumente und Einstellungen\User\Desktop\output.csv"

-> funktioniert wie gewünscht

versuch2:

im debugger die command line arguments:

C:\Dokumente und Einstellungen\User\Desktop\input.csv

C:\Dokumente und Einstellungen\User\Desktop\output.csv

-> funktioniert nicht da er für arg[0] "C:\Dokumente" nimmt, ist mir ja klar

versuch3:

selbe wie versuch2, ohne " mit einem pfad ohne leerzeichen

-> funktioniert auch

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Experimente bringen nicht viel. Du musst den Fehlerfall debuggen, nicht irgendetwas nachgebautes.

Bau in dein Konsolenprogramm am Anfang eine Eingabe von der Konsole oder so etwas ein. Dann starte dein Forms-Programm und lass es dein Konsolenprogramm starten. Wenn dann das Konsolenprogramm auf die Eingabe wartet, häng dich mit dem Debugger dran (Debug -> Attach to Process) und sieh nach, was über die Parameter reingekommen ist.

Hast du das mit dem absoluten Pfad versucht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

habe dies versucht, das problem ist bei

System.Diagnostics.Process.Start("programm.exe", sArguments);

bekomme ich schon folgende fehlermeldung:

Das System kann die angegebene Date nicht finden, habe vor allem anderen in der main in programm.exe ein readkey eingebaut, zu diesem komme ich nun garnicht um es weiter zu debuggen

Link zu diesem Kommentar
Auf anderen Seiten teilen

System.Diagnostics.Process.Start("C:\\projects\\adresshexler\\adrhexler\\adrhexler7\\bin\\Debug\\adrhexler7.exe", sArguments); funktioniert ganz normal, könntest du mir erklären warum?
Wenn du eine ausführbare Datei ohne Pfad starten willst, wird der Inhalt der Umgebungsvariablen PATH benutzt, um diese Datei zu suchen. Obiges Verzeichnis ist da bei dir sicher nicht drin, also klappt das ohne Pfad nur, wenn du das Forms-Programm aus dem Verzeichnis startest, in dem das Konsolenprogramm liegt.

Ich möchte übrigens festhalten, dass dein Problem nichts mit Escapen von Anführungszeichen zu tun hat. Für die Zukunft: Beschreib das Problem selbst, nicht das, was du für die Ursache hältst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hätte ich im string " könnte ich "pfad" als argument übergeben und hätte kein problem mit spaces in einem pfad
Du hast kein Problem mit Leerzeichen im Pfad. Du hast das Problem, dass deine Forms-Anwendung das Konsolenprogramm nicht findet. Wenn du den Pfad zum Konsolenprogramm explizit angibst, läuft's doch, oder?
Link zu diesem Kommentar
Auf anderen Seiten teilen

naja, kommen hier irgendwie garnicht weiter,

habe dies nun (imho quick and dirty) folgend gelöst:

pfad parsen -> space mit sonderzeichen ersetzt -> im programm.exe die argumente einzeln abgespeichert und sonderzeichen wieder mit spaces ersetzt

wie man nun " in einen string bekommt würde mich trotzdem noch interessieren!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast kein Problem mit Leerzeichen im Pfad. Du hast das Problem, dass deine Forms-Anwendung das Konsolenprogramm nicht findet. Wenn du den Pfad zum Konsolenprogramm explizit angibst, läuft's doch, oder?

nein? dass der pfad des inputfiles (arg[0]) leerzeichen enthält und ich diesen dann nicht so übergeben kann da wenn er über ein leerzeichen stolpert es in 2 argumente trennt...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...