Dateien verschieben (sortieren)????
-
Hallo Leute!
Ich bin einer mit Grundkenntnissen mit C++,API,MFC.
Meine Frage an euch wäre, wie man am einfachsten Dateien von einem Ordner sortiert. Genau gesagt, diese Dateien nach Dateinamen in andere Ordner verschiebt und auch wiederum dafür neue Ordner dafür erstellt falls der passende noch nicht existiert.
Ich habe noch keine Beispiele dafür gefunden und weis auch nicht welche Befehle ich für das verschieben der Datein in andere Ornder und das erstellen von neuen Ordnern brauche, bzw ob es auch Befehle dafür gibt...Wäre toll wenn wer was weis...
-
Hmm, ziemlich starker Tobak den du wissen möchtest.
Eine Komplettlösung für ein Problem, was du noch nicht einmal im Minimum erarbeitet hast bzw. wo du NULL Ahnung von hast.
Weiterhin kein Betriebssystem angegeben, also müssen wir wieder raten?
Bevor du gleich mit dem Sortieren von Einträgen beginnst, vielleicht erst einmal Grundlagen der Dateiverwaltung lernen. Du sagtest du hättest dazu nichts gfeunden.
Seltsam, ich hatte mal das gleiche Problem mit dem Erzeugen von Verzeichnissen, dem Umkopieren von Dateien, dem Erzeugen von Dateien, dem Auslesen von Dateien usw. und hatte aber durch Suche im Netz alle nötigen Informationen gefunden.z.B. hier:
http://www.willemer.de/informatik/cpp/fileop.htm#prgfileerror
Sollten spezielle UNIX Funktionen nicht auf deinem nicht angegebenen Betriebssystem, funktionieren, dann kannst du die Funktionen in den Dokumentationen deines uns unbekannten Betriebssystems nachschlagen.
Wenn du WinApi nutzen möchtest dann hilft vielleicht dieser Link:
http://www.codeproject.com/KB/files/Folder_Utility.aspx
(Sollten spezielle Informationen die du suchst dort nicht vorhanden sein, kannst du mit Hilfe dieser dort vorkommenden Informationen vielleicht eine Suchmaschine füttern, die dir dann Seiten auflistet, die eventuell die von dir gesuchten Funktionen auflistet)
Auch diese kann man über einfachstes Nutzen einer Suchmaschine finden.Hoffe, das es als kleine Starthilfe reicht.
Solltest du dann die Grundlagen der Dateioperationen dir zusammenngesucht und ein wenig damit experimentiert haben, kannst du ja gerne nochmals nach Sortieralgorythmen fragen. Aber zeige uns dann bitte auch den entsprechenden Code, den du dann bereits selbst erarbeitet hast.Gruß,
DC
-
MFC deutet auf Windows.
Das ist rekursiv ziemlich simpel zu lösen. Unter der Annahme, dass das WinAPI nicht in UNICODE-Variante eingebunden wird,
void MoveFolderRecursive(std::string const &from, std::string const &to) { WIN32_FIND_DATA wfd; HANDLE h; CreateDirectory(to.c_str()); h = FindFirstFile((from + "\\*.*").c_str(), &wfd); do { if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(strcmp(wfd.cFileName, ".") && strcmp(wfd.cFileName, "..")) { MoveFolderRecursive(from + "\\" + wfd.cFileName, to + "\\" + wfd.cFileName); } } else { MoveFile((from + "\\" + wfd.cFileName).c_str(), (to + "\\" + wfd.cFileName).c_str()); } } while(FindNextFile(h, &wfd)); FindClose(h); }
Ansonsten halt statt std::string std::basic_string<TCHAR> benutzen und alle String-Literale in _T() einpacken.
Allerdings gehört der Thread eigentlich ins WinAPI-Forum.
-
OK, muss zugeben, bin nicht der beste beim suchen im Nezt...
Mein Problem wäre aber noch wie ich am einfachsten mit c++ (Windows), oder wenns einfacher mit API wäre, eine Datei ausschneiden und wo anders einfügen.
Genau so wie man manuell die Tasten benützt (strg+x und dann strg+v).
-
Ausschneiden und Einfügen ist die Kurzform von Kopieren, Einfügen, alte Version löschen.
-
Für Datein habe ich ja (Beispiel):
BOOL WINAPI MoveFile( __in LPCTSTR lpExistingFileName, __in LPCTSTR lpNewFileName );
gefunden.
Mit dem verschieben von Ordnern stehe ich aber immer noch an!!
-
Mit dem verschieben von Ordnern stehe ich aber immer noch an!!
Dann solltest du dir das Beispiel von seldon mal etwas genauer ansehen.
-
Erstmal danke für eure Antworten.
Ich stehe aber mit den Ordnern immer noch an.
Könnte mir wer zum Verständnis bzgl zu dem rekursiven Beispiel zeigen, wie ich einfach nur einen einzelnen Ordner verschiebe (ohne rekursiv).
-
http://msdn.microsoft.com/en-us/library/aa365239(VS.85).aspx
Moves an existing file or a directory, including its children.
-
Mit Boost::FileSystem sollte das reltiv easy gehen
-
Nick Unbekannt schrieb:
Ausschneiden und Einfügen ist die Kurzform von Kopieren, Einfügen, alte Version löschen.
nicht ganz,
beim Ausschneiden und Einfügen auf einer Partition wird lediglich der Eintrag im Dateisystem geändert -> Verschieben ist schneller als Kopierenlediglich beim Verschieben von einem Datenträger zum anderen wird kopiert und dann das alte Exemplar gelöscht.