Deinamen einlesen und dann ändern und zurück schreiben
-
Hi
ich möchte einen Dateinamen (NTFS) als string einlesen, dann ändern und wieder zurück schreiben. (Mehre 1000 Dareien). Weiß aber net wie ich das machen soll kann mir einer helfen? danke.
-
Hohenstein schrieb:
ich möchte einen Dateinamen (NTFS) als string einlesen, dann ändern und wieder zurück schreiben.
In welcher Weise möchtest du denn den Dateinamen ändern?
Und wohin soll er zurückgeschrieben werden?
Ist es wichtig, dass es ein NTFS-Dateiname ist?(Mehre 1000 Dareien).
Schöne Tipparbeit. Vielleicht formulierst du einfach nochmal die Frage neu, ich glaub nämlich irgendwie, dass ich sie falsch verstanden habe.
-
Hab ich erst vor kurzem für nen Freund gemacht. Ist nix schönes und geht auch nur unter Windows (system(), erschlagt mich, ich hatte keinen Bock für so was triviales was anderes zu suchen). Aber du redest von NTFS, was AFAIK nur Windows unterstützt.
Hier der Quellcode:
#include "dirstream.h" #include <algorithm> #include <iostream> #include <functional> #include <vector> #include <string> #include <cctype> using namespace std; using namespace DIRSTREAM; int main() { DirStream Str("."); DirStreamIterator It(Str); vector<string> source; copy (It, DirStreamIterator(), back_inserter(source)); vector<string> target(source); vector<string>::iterator i = target.begin(); vector<string>::iterator j = source.begin(); for( ; i != target.end(); ++i, ++j) { while(!isalpha((*i)[0])) i->erase(0,1); string buffer = "ren \"" + (*j) + "\" \"" + (*i) + "\""; system(buffer.c_str()); } cout << endl; return 0; }
-
Hmm, ich denke, dass du damit auch ohne dirstream.h was anfangen kannst. Die hab ich von Hume (Danke noch mal, Hume
).
-
OK
Also erstmal Danke für die Antworten.
In welcher Weise möchtest du denn den Dateinamen ändern?
Bsp Dateinamen: 022._Name_Vorname_Alter.txt nach änderung so Name Vorname Alter.txt (Das bei mehr als 1000 Dateien per hand ist mir zu dumm also muss ein progie her)
Und wohin soll er zurückgeschrieben werden?
Wäre gut in ein anders Verzeichnis.
Ist es wichtig, dass es ein NTFS-Dateiname ist?
Ja wegen den langen Dateinamen nagut fat32 müsste auch noch gehen.
-
Du möchtest also, dass Unterstriche zu Leerzeichen werden und der Rest gelöscht wird (außer den Buchstaben)? Dann kannst du meins doch leicht umändern. In etwa so:
#include <vector> #include <string> #include <cctype> using namespace std; int main() { vector<string> source; // besorg dir irgendwie die Dateinamen vector<string> target(source); vector<string>::iterator i = target.begin(); vector<string>::iterator j = source.begin(); for( ; i != target.end(); ++i, ++j) { for(int k = 0; k < (*i).length(); ++k) { if((*i)[k] == '_') i->replace(k, " "); if(!isalpha((*i)[k]) && (*i)[k] != ' ') i->erase(k, 1); } string buffer = "ren \"" + (*j) + "\" \"" + (*i) + "\""; system(buffer.c_str()); } cout << endl; return 0; }
-
Wie lese ich die Dateinamen ein und das Schritt für Schritt, also Datei 1 dann 2 und 3 und soweiter?
-
[quote="Michael E."]Hab ich erst vor kurzem für nen Freund gemacht. Ist nix schönes und geht auch nur unter Windows (system(), erschlagt mich, ich hatte keinen Bock für so was triviales was anderes zu suchen). Aber du redest von NTFS, was AFAIK nur Windows unterstützt.
Habe jetzt eine möglichkei mir die dateinamen in string zu speichern
Mal noch ne kleine Frage wie bekomme ich die dann in deinen Quellcode rein!
Bsp: Für String name
string wort1, wort2
Danke
-
source.push_back(myString);