Frage

Die Windows-API-Funktion CopyFile hat ein Argument BOOL bFailIfExists, die Ihnen, ob oder nicht steuern, können Sie die Zieldatei überschrieben werden sollen, wenn es vorhanden ist.

Die boost::filesystem copy_file Funktion hat keine solche Argumente, und schlägt fehl, wenn die Zieldatei vorhanden ist. Gibt es eine elegante Möglichkeit, die Boost-Funktion copy_file und überschreiben Sie die Zieldatei zu benutzen? Oder ist es besser, einfach den Windows-API verwenden? Meine aktuelle Zielplattform Windows, aber ich ziehe STL zu bedienen und steigern wo möglich zu meinen Code plattformunabhängig zu halten.

Danke.

War es hilfreich?

Lösung

Es gibt eine dritte Enum Argument COPY_FILE, boost :: filesystem :: copy_option :: overwrite_if_exists

copy_file(source_path,destination_path,copy_option::overwrite_if_exists);

Andere Tipps

Beware of boost :: copy_file mit copy_option :: overwrite_if_exists! Wenn die Zieldatei vorhanden ist, und es ist kleiner als die Quelle, wird die Funktion überschreibt nur die erste Größe (from_file) in der Zieldatei Bytes.

Zumindest für mich dies ein Nachteil war, da ich copy_option vermutet :: overwrite_if_exists wirkt Dateien und nicht Inhalt

Test, wenn die Zieldatei vorhanden ist zuerst und wenn es dann nicht entfernen:

if (exists (to_fp))
    remove (to_fp);
copy_file (from_fp, to_fp);

Oder wenn Sie über die Datei zwischen dem Test und der Kopie erscheinen besorgt sind, dann könnten Sie in eine temporäre Datei schreiben und es dann in die Zieldatei umbenennen.

  

Gibt es eine elegante Möglichkeit, die Boost-Funktion copy_file und überschreiben Sie die Zieldatei zu benutzen?

Anscheinend gibt es keine direkte API, dies zu tun.

  

Oder ist es besser, einfach den Windows-API verwenden? Meine aktuelle Zielplattform Windows, aber ich ziehe STL zu bedienen und steigern wo möglich zu meinen Code plattformunabhängig zu halten.

Aus der Dokumentation:

  

Ein Vorschlag, N1975, Boost.Filesystem in Technical Report 2 enthalten ist vom C ++ Standards Committee akzeptiert. Die Boost.Filesystem Bibliothek wird in Übereinstimmung mit dem TR2 Filesystem Vorschlag bleiben, wie es seinen Weg durch den TR2 Prozess funktioniert. Beachten Sie jedoch, dass Namespaces und Header-Granularität unterscheidet zwischen Boost.Filesystem und dem TR2 Vorschlag.

Welche stark darauf hin, dass mit boost::filesystem klebt eine gute Idee ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top