C++: Problem beim Umbenennen von Dateien
-
Hallo!
Ich habe versucht ein kleines Programm zu entwickeln, das mir beim Umbenennen vieler Dateien helfen kann, weil ich mit der Windows-Konsole (also dieser Eingabeaufforderung) nicht klar gekommen bin. Ich bekomme jedoch eine Fehlermeldung (durch
perror
), dass die Dateien nicht gefunden werden können oder nicht existieren. Da bin ich aber etwas verwirrt, weil es die Dateien gibt UND die Namen in derrename()
-Funktion richtig sind. Könnt ihr mir bitte sagen, woran's liegt?Danke im Vorfeld!
P.S. Bitte keine Alternativen zur Eingabeaufforderung oder zum Schreiben des eigenen Programms vorschlagen. Ich muss das Ding hier zu Ende machen
#include "header.h" int getdir (string dir, vector<string> &files) { DIR *dp; struct dirent *dirp; //get the path name out of the file string pathName; fstream pathFile("E:\\Mano\\Uni\\M.Sc\\HiWi\\EO-LDAS\\Daten\\NEU\\path.bt"); if (!pathFile) { cerr << "Die Input-Datei kann nicht geoeffnet werden!" << endl; cin.get(); return -1; } else { getline(pathFile, pathName); } //get the new path name string user_path; cout << "Enter the path name: (press 0 for default path: " << pathName << ")" << endl; cin >> user_path; //edit user path name: //user_path.replace("\\", '\\\\'); dazu: http://www.linuxtopia.org/online_books/programming_books/c++_practical_programming/c++_practical_programming_060.html //write the new path name into a file if (user_path == "0") { cout << "using default path name" << endl; //string to const char* const char *constPath; constPath = pathName.c_str(); dp = opendir(constPath); while ((dirp = readdir(dp)) != NULL) { files.push_back(string(dirp->d_name)); } closedir(dp); } else { //converting string to const char* const char *constPath; constPath = user_path.c_str(); dp = opendir(constPath); if (dp != NULL) { pathFile << user_path; cout << "The new path is now: " << user_path << endl; while ((dirp = readdir(dp)) != NULL) { files.push_back(string(dirp->d_name)); } closedir(dp); } else { cout << "Path doesn't exist." << endl; } } return 0; } int main() { string addString; string replaceString; string dir = string("."); vector<string> files = vector<string>(); getdir(dir,files); cout << endl << "String to add: " << endl; cin >> addString; cout << endl << "String to replace: " << endl; cin >> replaceString; for (unsigned int i = 2;i < files.size();i++) { //cout << endl << "Listing all files..." << endl; //cout << files[i] << endl; string::size_type add_position; add_position=files[i].find(replaceString); if(add_position != string::npos) { const char *oldFileName; oldFileName = files[i].c_str(); cout << "oldFileName: " << oldFileName << endl; //for debugging string tempIrgendwas = files[i]; //for debugging string tempFileName = tempIrgendwas.replace(add_position, replaceString.size(), addString); //tempFileName = files[i].replace(4, 2, "8o33"); const char *newFileName; newFileName = tempFileName.c_str(); cout << "file: " << oldFileName << " to " << newFileName << " long: " << replaceString.size() << " at pos: " << add_position << " with: " << addString << endl; //for debugging int result = rename(oldFileName, newFileName); if ( result == 0 ) cout << oldFileName << "\t>>\t" << newFileName << endl; else perror( "Error renaming file" ); } } cin.get(); cin.get(); return 0; }
-
Zur Lösung kann man nicht viel sagen.
Empfehlenswert wäre im ersten Schritt, den Pfad zu minimalisieren. z.B ganz simple auf E:\\ und dort mit einer test.txt zu arbeiten.
int result = rename("E:\\test.txt", "E:\\foo.txt");
Wenn das so funktioniert, muss es an den Pfaden liegen.
Was steht denn in
E:\\Mano\\Uni\\M.Sc\\HiWi\\EO-LDAS\\Daten\\NEU\\path.btSind dort die enthaltenen Backslash's auch escaped?
-
Danke für deine Hilfe. Der in der Datei enthaltenen backslahes im Pfad sind escaped und der Pfad ist auch nicht kürzer als der zur path.bt-Datei. Ich habe gerade eben herausgefunden, dass Dateinamen absoluten Pfad haben müssen. Das liegt wahrscheinlich daran, dass die exe nicht im Projektordner liegt. Also nochmal danke, BasicMan01