#include "../include/dchat/FileUtil.hpp" #include "../include/dchat/env.hpp" #include namespace dchat { StringView getFileContent(const boost::filesystem::path &filepath) { #if OS_FAMILY == OS_FAMILY_POSIX FILE *file = fopen(filepath.c_str(), "rb"); #else FILE *file = _wfopen(filepath.c_str(), L"rb"); #endif if(!file) { int error = errno; std::string errMsg = "Failed to open file: "; errMsg += filepath.string(); errMsg += "; reason: "; errMsg += strerror(error); throw FileException(errMsg); } fseek(file, 0, SEEK_END); size_t fileSize = ftell(file); fseek(file, 0, SEEK_SET); char *fileData = new char[fileSize]; fread(fileData, 1, fileSize, file); fclose(file); return { fileData, fileSize }; } void fileReplace(const boost::filesystem::path &filepath, const StringView data) { #if OS_FAMILY == OS_FAMILY_POSIX FILE *file = fopen(filepath.string().c_str(), "wb+"); #else FILE *file = _wfopen(filepath.wstring().c_str(), L"wb+"); #endif if(!file) { int error = errno; std::string errMsg = "Failed to replace file: "; errMsg += filepath.string(); errMsg += ", reason: "; errMsg += strerror(error); throw FileException(errMsg); } setbuf(file, NULL); fwrite(data.data, 1, data.size, file); fclose(file); } }