Fehler bei system() (Fehler:"Die Syntax für den Dateinamen...")



  • Hallo,

    ich habe in einem Programm mehrere "System()"-Aufrufe.
    Also in der Form
    System(Programmname -o hallo.txt").

    Ich finde das nicht sehr schön, hatte aber keine vernünftige schnelle Lösung parat 🙂 Leider tat das ganze nur an meinem PC und nicht an Anderen. Woran das liegt weiß ich immernoch nicht. Deswegen habe ich meine "system()" Befehle mit ganzen Pfaden ausgestattet
    --> system ("c:\pfad\Programmname" -o "c:\Pfad\hallo.txt")

    Die Anführungsstriche benutze ich, da auch Leerzeichen im Pfad vorkommen können.

    Das Problem ist nun, daß es nicht tut und ich folgende Fehlermeldung bekomme
    "Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch"

    Wenn ich genau die Zeile die ich bei system("Zeile") benutze im "Dosfenster" eingebe tuts komischerweise 😕

    Weiß jemand Rat?

    Danke



  • Hallo

    Siehe Escapesequenzen.
    Also müßte dein Aufruf so aussehen

    system ("c:\\pfad\\Programmname\" -o \"c:\\Pfad\\hallo.txt");
    

    Desweiteren ist die WinAPI-Funktion ShellExecute besser geeignet.

    bis bald
    akari



  • oh, sorry. Escapesequenzen hab ich drin.
    Genau genommen sieht das zum Beispiel so aus:

    CString sSystemText = "\""+sFullPath+"Data\\dot\" -Tplain \""+sFullPath+"Data\\Graph.dot\" -o \""+sFullPath+"Data\\Graph.txt\"";
    system(sSystemText);
    

    wie kann ich denn das als "Shellexecute" schreiben?
    Wichtig ist, daß das Programm erst weitermacht wenn der Shellaufruf beendet ist.



  • Hört sFullPath möglicherweise nicht mit einem Backslash auf? 😉



  • Hallo

    zu Shellexecute : hier ist ein Beispiel für CreateProcess, was bei dir auch ausreicht.

    bis bald
    akari



  • Sorry für die halben Infos.

    CString sFullPath = R:\GrammViz\Debug\
    

    müßte eigentlich passen, denn wenn ich die Variable "sSystemText" anschaue steht da dann folgendes drin:

    "R:\GrammViz\Debug\Data\dot" -Tplain "R:\GrammViz\Debug\Data\Graph.dot" -o "R:\GrammViz\Debug\Data\Graph.txt"

    und das kann ich wie gesagt im Dosfenster ausführen.

    Das mit CreateProcess werde ich wohl doch nochmal versuchen. Blöderweise hatte ich damit auch meine Probleme... Aber vielleicht seh ich ja anhand deines Beispiels einen Fehler.
    Danke



  • Also mit CreateProcess() tut das obige Beispiel.
    ABER:
    Es geht nicht mit dieser Befehlszeile 😢
    *
    " "R:\GrammViz\Debug\Data\ngram.exe" -lm
    "R:\GrammViz\Debug\Data\ARPAin.arpa" -classes
    "R:\GrammViz\Debug\Data\CLAin-ngram.cla" -ppl
    "R:\GrammViz\Debug\Data\ngram.txt" "
    *

    entweder die Commandozeile ist zu lange???
    Oder CreateProcess weiß nicht was Pfad, Exe und Parameter ist... leider weiß ich nicht wie ich die Bildschirmausgabe des Aufgerufenen Programms (wenn es eine Ausgabe gibt) in eine Datei schreiben kann. CreateProcess meldet auf jeden Fall keinen Fehler.

    Die Beispiele die ich finde handeln alle nur von einer exe mit vielleicht 1 Parameter.

    Ist irgendjemand dieses Problem bekannt?


Anmelden zum Antworten