#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 {
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)
{
*/
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