Verschiedene system()-Befehle


  • Mod

    Das bezog sich auf system, nicht dessen Parameter Inhalt.



  • Achso okay. Trotzdem Ideen? 😃



  • Was willst du denn überhaupt machen? Willst du cmd nachbauen?
    Wahrscheinlich gibt es für dein Vorhaben eine einfachere Lösung.



  • Ich will/muss in meinem Programm in einen bestimmten Pfad navigieren, wo ich alle möglichen Dateien erkennen will. Und das geht nun mal am Besten (nach meinem bisherigen Stand) mit dem CD und DIR Befehl....

    EDIT: Mir ist gerade die spontane Idee einer Batch-Datei gekommen. Der benutzer gibt den per fgets() den Pfad ein, wo die Dateien liegen. In der Batch Datei steht dann:

    cd C:\.....
    DIR
    hier ggf. pause
    

    Bleibt also nur noch die Frage des auslesens...



  • CD und DIR haben nicht mit C zu tun, das sind lediglich Befehle die Microsoft, werauchimmer in sein Programm eingebaut hat.
    Lass den Benutzer doch einfach die Pfade eingeben (fgets) und bringe sie mit strcat dann so zusammen, dass du die Dateien mit fopen öffnen kannst.
    Übrigens: system nie mit benutzerdefinierter Eingabe aufrufen, ist denke ich selbsterklärend 🙂

    cd C:\..... 
    DIR > file.txt
    hier ggf. pause
    

    Ist zwar umständlich aber geht, die Datei file.txt dann im Programm einlesen.
    Die Portabilität ist dann natürlich gleich 0.



  • Solche sachen sind plattformspezifisch. Unter Windows kannst du FindFirstFile etc. benutzen.



  • Dass cd und dir keine C commands sind ist mir schon klar... xDD
    Aber was bedeutet denn das > im DIR Command?
    Und es geht um ALLE Dateien in dem Verzeichnis, nicht nur um .txt Dateien



  • #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argv, char *argc[])
    {
    	FILE *Batch;
    	char Pfad[50];
    	printf(" Pfad mit Doppel-Schraegstrich eingeben: ");
    	fgets(Pfad, sizeof(Pfad), stdin);
    	Batch = fopen("TEST.bat", "w");
    	fprintf(Batch, "cd %s", Pfad);
    	fprintf(Batch, "DIR\n");
    	fprintf(Batch, "Pause");
    	fclose(Batch);
    	return(0);
    }
    

    Das ist mein bisher funktionierender Pseudo-Code für die erstellen der .bat Datei. Bleibt nur noch das Auslesen des Ergebnisses. Hat da jemand eine Idee? Hat nicht mehr wiklich viel mit C zutun, kennt sich da trotzdem jemand in dem Bereich aus der weiß wie man die Ergebnisse in einem weiteren Text File oder im Cache abspeichert?



  • TocToc schrieb:

    weiß wie man die Ergebnisse in einem weiteren Text File oder im Cache abspeichert?

    Hab ich doch schon 2 mal versucht zu zeigen:

    DIR > file.txt
    

    In der Batch Datei schreibt das, was eigentlich von DIR ausgegeben würde in die Datei file.txt, ist egal wie die heißt kannst du auch abc.def nennen.
    Sprich: du hast dann Alle Dateien im Verzeichnis in file.txt / abc.def stehen und kannst sie mit fopen + fgets auslesen.



  • Achsoooo danke sorry Bitmapper das habe ich ganz anders verstanden tut mir Leid 😃 😃 😃



  • Vielen Dank an alle, damit ist mein Problem gelöst, Thread kann geschlossen werden 🙂


  • Mod

    Das mit der Datei ist keine gute Idee. Wie schon gesagt, ist system überhaupt fast nie eine gute Idee. Wenn du Ausgaben von Unterprozessen haben möchtest, musst du eine Pipe zu dem neuen Prozess herstellen. Je nach System kann das sehr einfach (Linux) oder etwas komplizierter (Windows) sein.

    Aber das Erstellen von Unterprozessen zum Zweck eines Verzeichniswechsels oder zum Lesen des Inhalts eines Verzeichnisses ist sowieso Unsinn, aus gleich mehreren Gründen:
    1. Neue Prozesse zu erstellen ist ein langsamer und aufwendiger Vorgang.
    2. Der neue Prozess hat doch sein eigenes Arbeitsverzeichnis! Eine Änderung merkt der Mutterprozess überhaupt nicht.
    3. Es gibt fertige Funktionen in der Betriebssystem-API dafür. Darauf wurde auch bereits hingewiesen.



  • #include <stdlib.h>
    #include <stdio.h>
    #include <windows.h>
    
    int main(int argv, char *argc[])
    {
    	FILE *Batch;
    	char Pfad[50];
    	printf("\n Pfad angeben: ");
    	fgets(Pfad, sizeof(Pfad), stdin);
    	Batch = fopen("CMD_Kommandos.bat", "w");
    	fprintf(Batch, "cd %s", Pfad);
    	fprintf(Batch, "DIR > C:\\Users\\jcremer\\Desktop\\Batchdatei\\Ergebnis.txt\n");
    	fprintf(Batch, "timeout /t 3 /nobreak\n");
    	fclose(Batch);
    	ShellExecute(NULL, "open", "C:\\Users\\jcremer\\Desktop\\Batchdatei\\CMD_Kommandos.bat", NULL, NULL, SW_NORMAL);
    	//remove("C:\\Users\\jcremer\\Desktop\\TEST.bat");
    	return(0);
    }
    

    Will sagen, dass sind nicht ungebedingt viele Zeilen Code und bevor ich mich kompliziert in die API reinarbeite mache ich das lieber auf diese Art und Weise 🙂

    Einziger Nachteil: Der Benutzer muss den Pfad korrekt eingeben...

    Ach ja, und ich kann das anschließende Datei-Auslesen gleich mal wieder üben.. 😉


  • Mod

    Wenn dies ein neuer Thread wäre, würde ich dieses Programm für einen Scherzbeitrag halten.

    Aber da du offensichtlich keine richtige Hilfe willst, ziehe ich mich aus diesem Thread zurück.



  • Ich sag dazu mal gar nix. Außer lächerlich wieder so ein TamTam drum zu machen -.-



  • Weil es dafür extra funktionen gibt, siehe MSDN FindFirstFile. Du kannst bei obenstehendem Code auch gleich eine Batchdatei benutzen...


Anmelden zum Antworten