Alle Dateien in einem Ordner umbennenen

dahr-brain

Grünschnabel
Hy,

ich will ein kleines Programm schreiben das alle Dateien in einem Ordner umbennent. Es soll Datei für Datei den Namen ermitteln und gegebenenfalls ihn abändern z. B.:
- "-" durch " - " ersetzen
- "_" durch " " ersetzen

Ich hab jetzt aber keine Vorstellung wie ich mir die Dateien nacheinander anzeigen las, noch wie ich dann den Namen ermittel und ggf. umbennen.

Mir wäre sehr geholfen wenn ich den Code hätte der mir Datei für Datei aus einem Ordner zurückliefert und den Namen der jeweiligen Datei in einer Variablen speichert.

Danke vorab
 
Welche Plattform? Dateizugriffe sind je nach Betriebssystem unterschiedlich, wenn du nicht gerade sowas wie die filesystem-Lib von Boost verwendest. Bei der WinApi kann ich dir weiterhelfen.
 
Ah, hab ich vergessen: ist Windows XP Prof. (Fedora Core 2 hab ich auch installiert wenn sich darunter jemand auskennt).
 
Ich habe mir mal eine nette Funktion gemacht, die die Pfade von allen Dateien in einem Verzeichnis in eine Liste von std::strings packt:
Code:
#pragma warning ( disable : 4786 ) //- nutzlose Warnung ausschalten
#include <list>
#include <string>

  void enum_files( const std::string& dir, const std::string& ext, std::list<std::string>& filenames )
  {
    HANDLE          hFind;
    WIN32_FIND_DATA wData;
    std::string     delimiter;
  
    if ( !dir.empty() && dir[ dir.size() - 1 ] != '\\\' )
      delimiter = "\\";
  
    std::string search = dir + delimiter + "*" + ext;

    hFind = FindFirstFile( search.c_str(), &wData );
    while ( hFind != INVALID_HANDLE_VALUE )
    {
      if ( !( wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) )
        filenames.push_back( dir + delimiter + wData.cFileName );

      //- Noch mehr zu tun?
      if ( !FindNextFile( hFind, &wData ) )
      {
        FindClose( hFind );
        hFind = INVALID_HANDLE_VALUE;
      }
    }
  }
Kannst du dir die nötigen Infos da rausholen? Im Prinzip geht es ja nur um FindFirstFile/FindNextFile.
 
Nein, da steig ich net durch :)
Könntest du es vielleicht so machen das ich ein Array hab wie f.:
name[0] = "dateiname.1adfasd.txt";
name[1] = "dateiname.2aadfasd.txt";
name[2] = "dateiname.3dddadfasd.txt";

Dann könnte ich ja leicht mit den String-Funktion drauf zugreifen und das Rename mach ich dann mit system().

Weiss nicht ob das jetzt zuviel Aufwand ist.
Gruss
 
Zurück