Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

gebe ich sArgument ein und lass es mir mit einer messagebox anzeigen bekomme ich das richtige ergebnis, doch übergebe ich dies so dem prozess als argument interpretiert er diesen falsch...

"pfad" "pfad" das würde stimmen...

  • Antworten 54
  • Ansichten 6.8k
  • Erstellt
  • Letzte Antwort

Top-Poster in diesem Thema

rufe ich das programm mit

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

in der cmd auf funktioniert es tadellos

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

unhandled exception ^^

programm.exe

hatte bis ich dieses problem gelöst habe selber ausgeführt,

da ich den normale usern kein konsolenprogramm aufdrücken wollte dachte ich mir stülpe ich schnell eine kleine win form drüber, ...

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.

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

soweit ich jetzt bin DENKE ich mir das bei

[...] sArgument nicht richtig interpretiert wird

Denken ist ja schön und gut, wie wäre es denn, wenn du es prüfst?

Gibt es einen Grund, warum du meine Fragen nicht beantwortest und nicht tust, worum ich dich gebeten habe? Denn dann kann ich mir das auch sparen.

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

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?

Ich hatte dich auch gebeten, beim Starten den absoluten Pfad zu programm.exe anzugeben. Was ist dabei herausgekommen?

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

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?

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

System.Diagnostics.Process.Start("C:\\projects\\adresshexler\\adrhexler\\adrhexler7\\bin\\Debug\\adrhexler7.exe", sArguments); funktioniert ganz normal, könntest du mir erklären warum?

:/ sagte ja das dies 100% nicht so ist, najo hab nun noch immer keinen "pfad" sondern einen pfad oder einen pf ad :/

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.

ich finde dass dies das problem ist? hätte ich im string " könnte ich "pfad" als argument übergeben und hätte kein problem mit spaces in einem pfad

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?

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!

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...

?

wenn ich string test = "\"blabla\"";

bekomme ich nicht "bla" sondern \"bla\" ---> erste seite stichwort: deferred execution

würde ich tatsächlich "bla" bekommen hätte ich dieses problem nicht, wo siehst du denn mein problem, genau?

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.