programm gleich mit argumenten starten



  • mhhh ja ich versteh schon weiss jetzt aber nicht wie das prog in rein c++ aussehen müsste. bin grad froh dass es überhaupt funktioniert.

    hatte es auch mit strings probiert hat aber irgendwie nicht geklappt?!?
    vieleicht hat der eine oder andere ja nochmal lust mich aufzuklären? 🤡 😕

    auf jeden fall schon mal vielen dank für die hilfe
    scarvy



  • Was passiert wenn du dem Programm keine Argumente übergibtst?



  • dann steht da:

    segmentation fault

    und dann kannste nochmal probiere:)



  • Du solltest am Anfang noch abfragen, ob überhaupt genug Argumente da sind:

    int main(int argc,char*argv[])
    {
      if(argc<2)
      {
        cout<<"bitte zwei Verzeichnisse zum Vergleich angeben!"<<endl;
        return 1;
      }
      //...
    }
    

    Auf diese Weise bekommst du auf jeden Fall eine sinnvollere Fehlermeldung als "Segmentation Fault" 😉 Oder du bietest dem Nutzer an der Stelle die Möglichkeit, die Verzeichnisnamen direkt anzugeben.



  • danke 👍 , hab die fehlermeldung eingebaut!

    thx für den hinweis



  • mhhhh finde im netz so auf die schnelle nichts über einen csv-export.
    habe vor die gefundenen änderungen halt in einer csv-datei zu speicher.

    würde mir da nochmal jemand helfen 🙄

    vielen dank
    scarvy



  • ob es da eine elegantere Version in C++ gibt, bin ich mir nicht sicher, aber mit

    FILE* ans=popen(cmd,"r");
    

    (anstelle des system()-Befehls kannst du dir die Rückgabe deines Befehls auf ein FILE legen und dann mit fscanf() selber abarbeiten.



  • Denke zuerst solltest du dich mal schlau machen wie du die Ergebnisse von diff in dein Programm importierst bevor du irgend etwas exportieren kannst.
    Kurt



  • @zuk

    stimmt. da gehts schon los. hast du vieleicht ne idee? (ich hab nämlich keine 😞 )



  • zum dritten (und hoffentlich letzten) Mal: man: popen wäre eine Möglichkeit.



  • tschuldige 😃

    hörte sich vom vorredner so an als ginge das nicht. werds sofort probieren. und danke für die hilfe. 😉



  • hi ich nochmal,

    also ich bekomme die datei einfach nicth als csv-datei exportiert.
    die erstellte csv-datei enthält leider keine angaben über die änderungen sonder folgendes:

    0xbffff624

    (vieleicht eine speicheradresse 😕 )

    ich weiss einfach nicth was ich falsch mache!!

    scavy



  • Auf die Rückgabe von popen() kannst du mit fscanf() oder fread() zugreifen, um die Werte auszulesen und dann selber in eine CSV zu speichern.



  • man man man 😞 😕 😡

    also ich verzweifle hier echt noch. ist doch eigentlich garnicht so schwer (kann ich mir nicht vorstellen), naja für mich ja anscheinend schon.

    also ich bekomme in meine csv-datei immer nur sowas:

    0x804c5c8

    ausgegeben in der konsole wird aber der richtige text. also wie komme ich an den text heran? hier der entsprechende codeausschnitt:

    char arg1[100];
                    char arg2[100];
    
                    strcpy(arg1, argv[1]);
                    strcpy(arg2, argv[2]);
    
                    char cmd[250];
                    sprintf( cmd, "diff -r %s %s", arg1, arg2);
    
    //              popen(cmd, "w");
    
                    fstream f;
                    f.open("unterschiede.csv", ios::out);
                    f <<popen(cmd, "w")<<endl;
                    f.close();
    
                    return 0;
    

    mensch kann mir nicht vorstellen das das so schwer ist !! 😮
    danke



  • popen liefert einen FILE* pointer zurück. Den kannst du anschließend mit fscanf() oder fread() durchlesen (dort kommen die Ausgaben in der selben Anordnung, wie sie auch auf der Konsole ausgegeben werden - also mußt du dir das selber in die für dich richtige Reihenfolge verpacken).

    Falls dir die Verarbeitung zu kompliziert ist, hätte ich noch eine Idee:

    sprintf(cmd,"diff -r %s %s > diff.txt",arg1,arg2);
    system(cmd);
    ifstream fin("diff.txt");
    ofstream fout("unterschiede.csv");
    //anschließend Daten aus fin lesen, ordnen und nach fout schreiben
    


  • hey supi vielen vielen dank (auch für die geduld 😃 )

    klappt wunderbar

    thx scarvy


Anmelden zum Antworten