programm gleich mit argumenten starten



  • 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