#pragma once #include #include #include #include #include #include "Path.h" #include "Utils/StringHelper.h" #include "Utils/Directory.h" class File { public: static bool Exists(const fs::path& filePath) { std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); return file.good(); } static std::vector ReadAllBytes(const fs::path& filePath) { std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); if (!file) return std::vector(); int32_t fileSize = (int32_t)file.tellg(); file.seekg(0); char* data = new char[fileSize]; file.read(data, fileSize); std::vector result = std::vector(data, data + fileSize); delete[] data; return result; }; static std::string ReadAllText(const fs::path& filePath) { std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate); int32_t fileSize = (int32_t)file.tellg(); file.seekg(0); char* data = new char[fileSize + 1]; memset(data, 0, fileSize + 1); file.read(data, fileSize); std::string str = std::string((const char*)data); delete[] data; return str; }; static std::vector ReadAllLines(const fs::path& filePath) { std::string text = ReadAllText(filePath); std::vector lines = StringHelper::Split(text, "\n"); return lines; }; static void WriteAllBytes(const fs::path& filePath, const std::vector& data) { std::ofstream file(filePath, std::ios::binary); file.write((char*)data.data(), data.size()); }; static void WriteAllBytes(const std::string& filePath, const std::vector& data) { if (!Directory::Exists(Path::GetDirectoryName(filePath))) Directory::MakeDirectory(Path::GetDirectoryName(filePath).string()); std::ofstream file(filePath, std::ios::binary); file.write((char*)data.data(), data.size()); }; static void WriteAllBytes(const std::string& filePath, const char* data, int dataSize) { std::ofstream file(filePath, std::ios::binary); file.write((char*)data, dataSize); }; static void WriteAllText(const fs::path& filePath, const std::string& text) { std::ofstream file(filePath, std::ios::out); file.write(text.c_str(), text.size()); } };