DOS Befehle in c/c++



  • ich möchte den DOS Befehl:

    dir /s/b C:\Documents and Settings\Administrator\>C:\1.txt

    benutzen um eine *.txt file zu erstellen, in denen sämtlich pfade vom angegebenen ordner aufgelistet werden

    welche möglichkeiten gibt es?

    system ("");

    funktioniert nicht in der cmd von windows gehts

    als zusätzlicher knackpunkt ist das ich

    dir /s/b C:\'xxx'>C:\1.txt
    'xxx' vom benutzer eingeben lassen will

    freu mich über konstruktive hilfe 🙂



  • Es funktioniert über system() - genau dafür ist die Funktion da.

    MfG SideWinder



  • char cd[300];
    char dir[300];
    char dir2[300];

    int main()
    {
    gets(cd);

    sprintf(dir, "dir /s/b \"%s\">C:\\1.txt",cd);
    sprintf(dir2, "dir /s \"%s\">C:\\2.txt",cd);

    system(dir);
    system(dir2);

    getch();
    return 0;
    }

    so muss das aussehn *g*
    habs dann doch irgendwie rausbekommen
    über zeiger also *, & und so müsste man auch zum Ziel kommen... ein weg reicht mir
    aber trotz dem danke für die hilfe



  • Kann mir bitte jemand erkläaren, was get(cd) macht? ermittelt das den Pfad?

    Und noch etwas, wenn ich den code compilen will, nimmt er das system (dir) nicht. kann mir jemand sagen warum?



  • gets(cd) liest von der Standardeingabe einen String ein. Allerdings sollte man statt dieser Funktion fgets() in Verbindung mit stdin (= Standardeingabe) verwenden, da hier kein ungewollter Bufferoverflow geschehen kann. gets() ist also ein Sicherheitsrisiko.

    Welche Fehlermeldung erhältst du denn vom Compiler, zwecks system(dir)?



  • wenn ich mich jetzt nicht extrem irre muss man nach fgets aber den tatstatur puffer leeren oder überprüfen (hab da keine ahnung also glaubt mir fast nichts)
    um zB ein doppel Enter zu verhindern

    wenn ich:

    system("dir /s/b ....");
    ausführe bekomme ich den Fehler can't find folder oder sowas in der arte.
    dies behebt man durch ein doppeltes \
    wie folgt

    c:\\folder\\folder\\
    an der letzten stelle müssten es sogar 3 \ sein ?!?

    nur hat mir das nicht gereicht, es sollte vom Anwender bestimmt werden können!

    gets();

    liest in die Var ein die deklariert wurde:

    char cd[300];
    die 300 bedeutet das ein feld von 300 zeichen reserviert wird...
    das heißt 299 und ein Enter (\n)
    in der Var, "cd" oder beliebige andere, können 299 Zeichen gespeichert werdne

    bitte fehler berichtigen



  • Mein Problem kommt bei;

    sprintf(dir, "dir /s \"%s\">C:\\2.txt",cd);
    

    wenn ich das Programm jetzt starte, kommt ein leerer screen und wenn ich dann, wenn ich den Pfad eine datei eingebe, nur der Pfad zurück. Was macht die obere Zeile eigentlich. Ich versteh, das etwas in der Variable dir gespeichet wird, aber was soll das:

    "dir /s \"%s\">C:\\2.txt",cd
    


  • stell dir das so vor:

    gets(cd); // ließt einen String ein
    // in diesem programm musst du das in einem zusammenhang sehen
    // was du hier einträgst wird unten weiter benutzt
    // du musst wie folgt eingeben: "c:"
    // oder: "d:\winnt" oder "c:Dokuments and Setting\... "

    system(dir, "dir /s/b \"%s\">C:\\1.txt",cd);
    system(dir2, "dir /s \"%s\">C:\\2.txt",cd);

    system(dir, "dir /s/b \"%s\">C:\\1.txt",cd); //mit Pfad c:
    // würde in der cmd von windows dann so aussehn:
    // dir /s/b c:>C:\2.txt
    // du kannst auch wie folgt schreiben:

    system("dir /s/b c:\\Dokuments and Setting\\>C:\\1.txt",cd);

    /*du musst \\ schreiben da es zu einem fehler kommt - er denkt das ist ein befell und keine aufforderung -eingabe*/



  • Achso, danke. Ich dachte die ganze zeit sprintf liest den string ein (wie cin).

    Funzt jetzt, danke auch.

    Noch ne kleine Frage: Was is besserer Prog. Stil?

    ofstream file oder FILE *file ?



  • nero-ex schrieb:

    Noch ne kleine Frage: Was is besserer Prog. Stil?

    ofstream file oder FILE *file ?

    Keins von beiden.

    ofstream ist C++ und FILE * ist C.
    Man könnte höchstens noch sagen, dass ofstream bei einem C++-Programm besser ist und FILE * bei einem C-Programm. Eine Mischung beider sollte man vermeiden.


Anmelden zum Antworten