Zufallsdateinamen



  • Hi,
    ich habe ein Problem und habe nicht mal einen plassen schimmer wie ich auch nur an das ganze ran gehen koennte. Ich habe ein Programm was 3 Ordner erstellt, und denen die Namen 1, 2, 3 giebt, jedoch moechte ich, dass die Ordner zufallsnamen bekommen.
    Das ganze habe ich mir ungefaehr so vorgestellt, dass ich alle buchstaben von A - Z und a - z zulasse, der Ordner aber nur eine maximale Dateinamenlaenge von 8 Zeichen haben soll.

    Waehre ueber jeden Hinweis oder auch Beispielcode erfreut auch wenn "nur" eine zufallsfunktion dargestellt wird.

    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <sstream>
    
    using namespace std;
    
    int main()
    {  
        int name;
        stringstream foo;
    
        for (name = 1; name <= 3; name++)
            {
                  foo << "mkdir " << name; 
                  system(foo.str().c_str()); foo.str("");
            }
        return EXIT_SUCCESS;
    }
    

    MfG
    Coda



  • ich wuerds(als Anfaenger und ungetestet) so probieren:

    std::string randomname(){
        std::string zeichen("abcd"); //alle Zeichen die du im Namen haben willst
        int laenge=rand()%8+1;
        std::string res("");
        for(int i=0;i<laenge;++i)
            res=res+zeichen[rand()%zeichen.length()];
        return res;
    }
    


  • Leider nicht ganz, da dies keine wirkliche zufallsfunktion ist, er erstellt zwar den ersten namen zufaellig (allerdings auch nur aus 2 buchstaben besehend) aber beim erneuten aufrufen des progs, erstellt er genau den selben dateinamen, einen aehnlichen Effect gibt es auch bei einer php Funktion. Ich sehe mal nach wie da das geloest wurde, trotzdem danke. Das ist schon mal ein Schritt weiter.

    ps. mit 1+8 komme ich auf meine acht zeichen, jedoch besteht immer noch das problem mit dem Zufall.

    MfG
    Coda



  • #include <ctime>
    //
    std::string randomname(){
    srand( time( NULL ) );
    std::string zeichen("abcd"); //alle Zeichen die du im Namen haben willst
    int laenge=rand()%8+1;
    std::string res("");
    for(int i=0;i<laenge;++i)
    res=res+zeichen[rand()%zeichen.length()];
    return res;
    }

    Oder so ähnlich, gerade keine Zeit 😉



  • Am Anfang deiner main()-Funktion einmal

    srand(time(0));
    

    aufrufen. Sonst alles so lassen (das von Init stimmt nicht ganz).

    mfg.



  • Super, danke joomoo.

    MfG
    Coda



  • Jo gut, wenn man rand benutzt sollte man eben ans Anfang der main einmal ein srand(time(0)); hinsetzen, das hatte ich jetzt nicht hinzugefügt weil es nicht in der Funktion sondern eben am Anfang der main steht.


Anmelden zum Antworten