system()-Leerzeichenproblem
-
Also hier ist ein wenig Quellsode:
String tempa, Befehl; const String pfad="C:\Temp\text.txt"; int a; TStringList *temp; temp = new TStringList; Befehl = Edit1->Text; tempa = Befehl + " > " + pfad; a = system (tempa.c_str()); temp->LoadFromFile(pfad);Also, man soll in Edit1 einen Dosbefehl eingeben und in der TStringlist steht dann das Ergebniss, welches man in einem Rich Edit ausgeben kann. Das ganze geht noch sehr gut aber wenn ich jetzt zB. "dir C:\Program Files\" Eingabe kommt bei a 1 raus. Das heist der Befehl enthält einen Fehler. Das Problem sind die Leerzeichen. Wie kann ich machen, dass es geht?
Stratege993
-
Hallo
Bereits bei der Eingabe müßen Pfadangaben wegen potentieller Leerzeichen in Hochkommas gesetzt werden (Probier es mal in cmd.exe aus)
C:\Dokumente und Einstellungen\akari>dir C:\Program Files\ Das System kann die angegebene Datei nicht finden. C:\Dokumente und Einstellungen\akari>dir "C:\Program Files\" Datenträger in Laufwerk C: ist ACER Volumeseriennummer: akari Verzeichnis von C:\Program Files 07.02.2007 15:15 <DIR> . 0 Datei(en) 0 Bytes 1 Verzeichnis(se), 1.410.375.680 Bytes freibis bald
akari
-
Problem Nummer 2 sind hier die nicht maskierten Backslashs. Zeile 2 sollte eher so aussehen
const String pfad="C:\\Temp\\text.txt";oder so
const String pfad="C:/Temp/text.txt";
-
super es geht danke, das irgendwo Hochkommas hin müssen, wusste ich zwar aber nicht wo.
Stratege993
-
also ich habe noch 2 weitere Fragen:
- Kann man sagen, dass das Systemfenster nicht angezeigt wir (Visible=false)?
- Wie kann man 2 oder mehr Befehle ausführen, in dem selben Fenster?
Stratege993
-
Eigentlich sollte system nicht mehr verwendet werden. ShellExecute ist die bessere Wahl:
AnsiString DeinBefehl_1 = "dir c: > c:\\blub.txt"; AnsiString DeinBefehl_2 = "dir c: > c:\\bla.txt"; AnsiString DerBefehl = "/c \"" + DeinBefehl_1 + " && " + DeinBefehl_2 + "\""; ShellExecute(NULL, "open", "cmd", DerBefehl.c_str(), NULL, SW_HIDE/*das sorgt dafür dass das Fenster nicht angezeigt wird*/);Funktioniert afair aber nur unter XP.