diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2007-09-04 04:48:13 +0000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2007-09-04 04:48:13 +0000 |
commit | e3364b72cce555a699660be1f0e69faf3c22892e (patch) | |
tree | c54417b107b3709017d74e25d2d4a4354f39ed18 /libs/pbd | |
parent | 653a552da503f3d9e250958998868c2021bef823 (diff) |
Add function PBD::sys::copy_file intended to replace PBD::copy_file
Basically moving PBD::copy_file implementation to pbd/filesystem.h/cc.
The implementation itself looks like it could be improved to use
much less memory when copying big files by reading and writing in
chunks but I don't think that is an issue at present.
git-svn-id: svn://localhost/ardour2/trunk@2376 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd')
-rw-r--r-- | libs/pbd/filesystem.cc | 26 | ||||
-rw-r--r-- | libs/pbd/pbd/filesystem.h | 10 |
2 files changed, 36 insertions, 0 deletions
diff --git a/libs/pbd/filesystem.cc b/libs/pbd/filesystem.cc index aefe6d525c..2412b76761 100644 --- a/libs/pbd/filesystem.cc +++ b/libs/pbd/filesystem.cc @@ -22,12 +22,16 @@ #include <glib/gstdio.h> #include <cerrno> +#include <fstream> #include <glibmm/fileutils.h> #include <glibmm/miscutils.h> #include <pbd/filesystem.h> #include <pbd/error.h> +#include <pbd/compose.h> + +#include "i18n.h" namespace PBD { @@ -108,6 +112,28 @@ remove(const path & p) return true; } +void +copy_file(const path & from_path, const path & to_path) +{ + // this implementation could use mucho memory + // for big files. + std::ifstream in(from_path.to_string().c_str()); + std::ofstream out(to_path.to_string().c_str()); + + if (!in || !out) { + throw filesystem_error(string_compose(_("Could not open files %1 and %2 for copying"), + from_path.to_string(), to_path.to_string())); + } + + out << in.rdbuf(); + + if (!in || !out) { + throw filesystem_error(string_compose(_("Could not copy existing file %1 to %2"), + from_path.to_string(), to_path.to_string())); + remove (to_path); + } +} + string basename (const path & p) { diff --git a/libs/pbd/pbd/filesystem.h b/libs/pbd/pbd/filesystem.h index 7eca8a7ed3..3ea009649d 100644 --- a/libs/pbd/pbd/filesystem.h +++ b/libs/pbd/pbd/filesystem.h @@ -106,6 +106,16 @@ bool create_directories(const path & p); */ bool remove(const path & p); +/** + * Attempt to copy the contents of the file from_path to a new file + * at path to_path. + * + * @throw filesystem_error if from_path.empty() || to_path.empty() || + * !exists(from_path) || !is_regular(from_path) || exists(to_path) + */ +void copy_file(const path & from_path, const path & to_path); + + string basename (const path& p); } // namespace sys |