In c++ Programm Datei/Ordner kopieren



  • Hi leute,

    wollte wissen ob es in c++ unter linux eine Funktion, mit der man im Programm Dateien/Ordner kopieren kann z.B. ähnlich wie die copyFile()-Funktion unter Windows?
    Oder muss ich das Problem mit streams (ähnlich wie in C) lösen?

    Hab bei meiner eigenen Recherche im Web bisher keine Antwort gefunden

    gruß heiko


  • Mod

    Nein, solch einen Systemaufruf gibt es meines Wissens nach nicht. Die Argumentation ist, dass das keine Kernelaufgabe ist, sondern typischer Userspace. Das heißt aber nicht, dass du unbedingt mit den nativen Streams deiner Programmiersprache hantieren musst, zum Lesen und Schreiben kannst du
    man: read(2)
    und
    man: write(2)
    benutzen, was effizienter sein dürfte. Für den Umgang mit Verzeichnissen gibt es auch Funktionen, die sich leicht googlen lassen.

    Achte auf die Dateiattribute!

    Du kannst dir auch mal den Quellcode von cp suchen, dann siehst du, wie man das implementieren kann.



  • Moin,

    vielleicht willst Du den Kopierbefehl des Betriebssystems aufrufen?
    http://de.wikipedia.org/wiki/Cp_(Unix)



  • CopyFile sollte sich ja ohne große Probleme in ein paar Zeilen nachbauen lassen. Für die Verarbeitung von Verzeichnissen unter Einbeziehung von Unterverzeichnissen gibt es in POSIX die Funktionen ftw und nftw. Diese nehmen einen Funktionszeiger entgegen, mit dem sich dann alles mögliche auf Verzeichnisbäume anwenden lässt.

    ftw und nftw sind hier vor einer Weile schon einmal in die Diskussion eingeflossen. VORSICHT: Da ging es um das Löschen von Verzeichnissen.



  • allegro12 schrieb:

    Moin,

    vielleicht willst Du den Kopierbefehl des Betriebssystems aufrufen?
    http://de.wikipedia.org/wiki/Cp_(Unix)

    Danke aber meine Frage war eigentlich, ob es eine vordefinierte Funktion gibt, die ich in meinen Quellcode einfügen kann, ähnlich dem copyFile() unter Windows

    At seldon
    danke, das kopieren, erstellen und löschen von verzeichnissen wird auch noch thema werden in meinem Programm

    gruß Heiko



  • Gibt es meines Wissens nicht. Grundsätzlich ist so was natürlich einfach zu bauen, aber wenn man API-Qualität bieten will (also alle Fälle abdecken muss), ist es auf UNIX-Dateisystemen ein bisschen komplizierter. Wie soll sich die Funktion beispielsweise verhalten, wenn an der Zielstelle ein Symlink gleichen Namens schon besteht? Link entfernen und durch Datei ersetzen oder den Inhalt der gelinkten Datei ersetzen? Was, wenn dort schon eine Datei liegt, die mehrere Namen (Hardlinks) hat? Oder wenn die Quelldatei ein Symlink ist? Da gibt es vieles, was man so oder so sehen kann.



  • schau mal hier:
    http://www.boost.org/doc/libs/1_49_0/libs/filesystem/v3/doc/reference.html#copy

    dürfte beide Fälle Windows/Linux abdecken.

    gruß


Anmelden zum Antworten