Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

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
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Geschrieben (bearbeitet)

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
Geschrieben

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

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

Geschrieben (bearbeitet)

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

Geschrieben (bearbeitet)

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
Geschrieben

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?

Geschrieben
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

Geschrieben

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?

Geschrieben

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

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

Geschrieben
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?
Geschrieben

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!

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

Geschrieben

?

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?

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