#include "fileutils.hpp" using namespace iflytop; using namespace core; bool FileUtils::exist(const string &path) { struct stat statInfo; if (stat(path.c_str(), &statInfo) == 0) { return true; } return false; } bool FileUtils::isDirectory(const string &path) { struct stat statInfo; if (stat(path.c_str(), &statInfo) == 0) { if (S_ISDIR(statInfo.st_mode)) { return true; } else { return false; } } return false; } // mkfile bool FileUtils::makeDirIfNoExist(const string &path) { string::size_type sepPos = path.find_last_of("/"); if (sepPos == string::npos) { return false; } string dirPath = path.substr(0, sepPos); if (exist(dirPath)) { return true; } int ret = system(("mkdir -p " + dirPath).c_str()); // mkdir(dirPath.c_str(), S_IRWXU | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); return 0 == ret ? true : false; } // readfile string FileUtils::readFileAsString(const string &filePath) { if (!exist(filePath)) { return ""; } fstream file(filePath.c_str(), ios::in | ios::binary); stringstream sstream; sstream << file.rdbuf(); file.close(); string str(sstream.str()); sstream.clear(); return str; } std::vector FileUtils::readFileAsBuffer(const string &filePath) { std::vector ret; if (!exist(filePath)) { return std::move(ret); } fstream fs; fs.open(filePath.c_str(), ios::in | ios::binary); if (!fs.is_open()) { return std::move(ret); } fs.seekg(0, ios::end); int fileSize = fs.tellg(); fs.seekg(0, ios::beg); ret.resize(fileSize); char *dataAddr = (char *)ret.data(); fs.read(dataAddr, fileSize); fs.close(); return std::move(ret); } // write file bool FileUtils::writeToFile(const string &fileName, const string &buf) { return writeToFile(fileName, buf.c_str(), buf.size()); } shared_ptr FileUtils::openTrunc(const string &fileName) { makeDirIfNoExist(fileName); shared_ptr file(new ofstream(fileName, std::ios::trunc | std::ios::binary)); return file; } bool FileUtils::writeToFile(const string &fileName, const char *buf, size_t size) { std::ofstream outfile1(fileName, std::ios::trunc | std::ios::binary); if (outfile1.is_open()) { outfile1.write((char *)buf, size); if (outfile1.good()) return true; return false; } else { return false; } } #if 0 bool FileUtils::getRepetitionFileName(string fileName, string suffix, string &outfilename, int maxNum = -1) {} bool FileUtils::getRepetitionDirName(string fileName, string &outfilename, int maxNum = -1) {} // filename operat string FileUtils::getRepetitionFileName(string fileName, string suffix, int maxNum = -1) { string curName; if (maxNum >= 0) { for (int i = 0; i < maxNum; i++) { curName = fmt::format("{}{}.{}", fileName, i, suffix); if (!FileUtils::exist(curName)) return curName; } } else { for (int i = 0; i <= 65536; i++) { curName = fmt::format("{}{}.{}", fileName, i, suffix); if (!FileUtils::exist(curName)) return curName; } } return fmt::format("{}{}.{}", fileName, "reachMax", suffix); } string FileUtils::getRepetitionDirName(string fileName, int maxNum = -1) { string curName; if (maxNum >= 0) { for (int i = 0; i < maxNum; i++) { curName = fmt::format("{}{}", fileName, i); if (!FileUtils::exist(curName)) return curName + "/"; } } else { for (int i = 0; i <= 65536; i++) { curName = fmt::format("{}{}", fileName, i); if (!FileUtils::exist(curName)) return curName + "/"; } } return ""; } #endif