Automatische Dateinamen



  • Hallo allerseits

    ich suche nach einer Lösung um einen Dateinamen automatisch um eine Nummer zu erweitern, die dann automatisch hochgezählt wird.

    Beispiel: datei_00.txt oder datei.000

    Bereits vorhandene Dateien sollen eben nicht überschrieben werden, sondern es soll dann einfach die nächste freie Nummer verwendet werden.

    Beispiel:
    datei.000 und datei.001 existieren schon. Damit wäre der nächste Dateiname datei.002.

    Und ich verwende lediglich die STL um Plattformunabhängig zu bleiben.
    Gibt es dafür schon irgendwo eine Lösung? Mit google habe ich leider nichts gefunden. Vermutlich habe auch nur ich die falschen Stichworte verwendet.

    Zu meinem Background. Bisher habe ich lediglich auf Embedded Systemen ohne File- und Betriebssystem in C programmiert und will nun langsam mal den Einstieg in C++ kriegen.
    Verwendete Compiler: MinGW und gcc.



  • Da musst du dann halt auslesen wie viele Dateien in deinem Verzeichnis sind, das Ergebnis um eins erhöhen, und schließlich an deinen neuen Dateiname anhängen.

    Die leichtere Alternative wäre einfach nen Unix Timestamp and deinen Dateinamen ranzuhängen.
    Wesentlich einfacher zu programmieren, und erfüllt seinen Zweck ebenfalls voll und ganz (außer du schreibst halt pro Sekunde mehr als eine Datei, dann klappt's nicht mehr).



  • #include <sstream>
    ...
    
    std::stringstream s;
    int nr = 0;
    
    s << "datei_" << nr << ".txt";
    
    nr++;
    


  • Ja, mit dem Timestamp ist eine gute Idee. Das ich da nicht selbst drauf gekommen bin.

    Das Programm erzeugt bei jedem Aufruf eine Ausgabedatei, und wird über die Konsole gestartet. Deshalb funktioniert das einfache hochzählen eines programminternen Zählers eben nicht. Man müsste erst das directory auslesen und analysieren um dann die nächste Zahl zu erhalten. Das ist mir aber im Moment etwas zu umständlich, zumal ich mit meinem Wissenstand erste mal einen Sack weiterer Probleme hätte.
    Deshalb halte ich die Lösung mit dem Timestamp für eine saubere Lösung meines Problems.

    Dankeschön an Euch.



  • Wenn du Boost:Filesystem verwenden willst,
    hat du die möglichekit das verzeichnis auszulesen.
    Dadurch könntest du auch plattformunabhängig das ganze mti deinen Nummern implementieren und so von der geschwindigkeit unabhängig bleiben.
    Denn beim einfachen umsortieren dürftest du mehr als 1 file/s schreiben ...

    mfg


Anmelden zum Antworten