system("attrib +h C:\\Pfad");



  • Hallo!

    Ich habe eine Frage, und zwar:
    Kann man bei dem folgenden "attrib"-Befehl als Pfad auch irgendwie einen
    "String" mitgeben?
    Also irgendwie so:

    system("attrib +h %s, &pfad");
    

    Vielen Dank für eine Antwort!

    lg. rrr



  • Nein, musst du vorher zusammenbasteln.

    Mit strcpy(), strcat() oder mit sprintf()



  • oder eine entsprechende mySystem () Funktion dazu basteln, die funktioniert wie printf, nur für system Statt Ausgabe 🙂



  • Warum der Formatspezifizierer - das ist kein printf. system erwartet nur einen String als Argument:

    const char* arg1 = "attrib +h ";
        const char* path = "mypath\n";
        size_t len1 = strlen(arg1);
        size_t len2 = strlen(path);
        size_t len =  len1 + len2 + 1;
        char* args = malloc(len);
        strcpy(args, arg1);
        strcpy(&args[len1], path);
        args[len] = '\0';
        system(args);
        free(args);
    

    Das alles ist dahingerotzt und ungetestet (sollte man in C nie machen), da es sehr viel einfacher mit der passenden Api-Funktion geht.



  • Argh, path sollte eigentlich wieder mit

    const char* path = /*wahtever*/;
    

    ersetzt werden,, ich hatte es doch noch vorsichtshalber kurz getestet...

    Wie dem auch sei, schau dir den Link an, diese Funktion ist in jedem Fall vorzuziehen.



  • const char* arg1 = "attrib +h ";
        const char* path = "mypath\n";    // Seit wann ist \n im Pfad erlaupt ?
        size_t len1 = strlen(arg1);       
        size_t len2 = strlen(path);       
        size_t len =  len1 + len2 + 1;
        char* args = malloc(len);
        strcpy(args, arg1);
        strcpy(&args[len1], path);   // Dafür gibt es strcat(args, path);
        args[len] = '\0';            // Das machen selbstverständlich strcat und strcpy 
        system(args);
        free(args);
    


  • Wenn ich folgendes ausführe

    const char* arg1 = "attrib +h ";
    const char* mypath = path;    
    size_t len1 = strlen(arg1);
    size_t len2 = strlen(mypath);
    size_t len =  len1 + len2 + 1;
    char* args = malloc(len);
    strcpy(args, arg1);
    strcpy(&args[len1], path);
    //args[len] = '\0';
    system(args);
    free(args);
    

    kommt der Fehler

    Parameterformat falsch
    

    Kann das an den Leerzeichen im "path" liegen? Wie löse ich das?

    Danke und lg.



  • So geht es nämlich. Im String ist nun vor und nach dem Pfad ein (\") angebracht.

    system("attrib +h \"C:\\Dokumente und Einstellungen\\max mustermann\\Desktop\\test\\test.log\"");
    

    Aber ich will das ja nicht fix reinschreiben! Ich frage vorher den Usernamen ab und deswegen muss ich mir so einen String zusammenbauen.
    Es funkt nur irgenwie nicht!

    lg.



  • Jetz fällt mir auch noch auf, dass die Nullterminierung fehlerhaft ist (C ist ne Weile her).
    Aber wie geschrieben, schau dir GetFileAttributes/SetFileAttributes an.



  • Dann füge doch die " mit in den String ein:

    size_t len =  len1 + len2 + 1 + 2; // für 2 "
    char* args = malloc(len);
    strcpy(args, arg1);
    strcat(args, "\""); 
    strcat(args, path); 
    strcat(args, "\"");
    

Anmelden zum Antworten