Add Utility::CopyFile()

refs #7423
This commit is contained in:
Michael Friedrich 2014-10-22 19:25:29 +02:00
parent 6bfd6312f5
commit 9227d990dc
2 changed files with 22 additions and 2 deletions

View File

@ -30,6 +30,9 @@
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <ios>
#include <fstream>
#include <iostream>
#ifdef __FreeBSD__
# include <pthread_np.h>
@ -309,7 +312,7 @@ Utility::LoadExtensionLibrary(const String& library)
#ifdef _WIN32
HMODULE hModule = LoadLibrary(path.CStr());
if (hModule == NULL) {
BOOST_THROW_EXCEPTION(win32_error()
<< boost::errinfo_api_function("LoadLibrary")
@ -318,7 +321,7 @@ Utility::LoadExtensionLibrary(const String& library)
}
#else /* _WIN32 */
void *hModule = dlopen(path.CStr(), RTLD_NOW);
if (hModule == NULL) {
BOOST_THROW_EXCEPTION(std::runtime_error("Could not load library '" + path + "': " + dlerror()));
}
@ -638,6 +641,21 @@ bool Utility::MkDirP(const String& path, int flags)
return ret;
}
bool Utility::CopyFile(const String& source, const String& target)
{
if (Utility::PathExists(target)) {
Log(LogWarning, "Utility")
<< "Target file '" << target << "' already exists.";
return false;
}
std::ifstream ifs(source.CStr(), std::ios::binary);
std::ofstream ofs(target.CStr(), std::ios::binary);
ofs << ifs.rdbuf();
return true;
}
#ifndef _WIN32
void Utility::SetNonBlocking(int fd)

View File

@ -137,6 +137,8 @@ public:
static bool PathExists(const String& path);
static bool CopyFile(const String& source, const String& target);
private:
Utility(void);