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 frei
    

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


Anmelden zum Antworten