libultraship
Reimplementations of libultra (N64 SDK) functions for modern hardware
Loading...
Searching...
No Matches
DiskFile.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdio>
4#include <fstream>
5#include <iostream>
6#include <string>
7#include <vector>
8#include "Path.h"
9#include "Directory.h"
10
17class DiskFile {
18 public:
24 static bool Exists(const fs::path& filePath) {
25 std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate);
26 return file.good();
27 }
28
34 static std::vector<uint8_t> ReadAllBytes(const fs::path& filePath) {
35 std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate);
36
37 if (!file)
38 return std::vector<uint8_t>();
39
40 int32_t fileSize = (int32_t)file.tellg();
41 file.seekg(0);
42 char* data = new char[fileSize];
43 file.read(data, fileSize);
44 std::vector<uint8_t> result = std::vector<uint8_t>(data, data + fileSize);
45 delete[] data;
46
47 return result;
48 };
49
55 static std::string ReadAllText(const fs::path& filePath) {
56 std::ifstream file(filePath, std::ios::in | std::ios::binary | std::ios::ate);
57 int32_t fileSize = (int32_t)file.tellg();
58 file.seekg(0);
59 char* data = new char[fileSize + 1];
60 memset(data, 0, fileSize + 1);
61 file.read(data, fileSize);
62 std::string str = std::string((const char*)data);
63 delete[] data;
64
65 return str;
66 };
67
73 static std::vector<std::string> ReadAllLines(const fs::path& filePath) {
74 std::string text = ReadAllText(filePath);
75 std::vector<std::string> lines = StringHelper::Split(text, "\n");
76
77 return lines;
78 };
79
86 static void WriteAllBytes(const fs::path& filePath, const std::vector<uint8_t>& data) {
87 if (!Directory::Exists(Path::GetDirectoryName(filePath))) {
88 Directory::MakeDirectory(Path::GetDirectoryName(filePath).string());
89 }
90 std::ofstream file(filePath, std::ios::binary);
91 file.write((char*)data.data(), data.size());
92 };
93
100 static void WriteAllBytes(const std::string& filePath, const std::vector<char>& data) {
101 if (!Directory::Exists(Path::GetDirectoryName(filePath))) {
102 Directory::MakeDirectory(Path::GetDirectoryName(filePath).string());
103 }
104
105 std::ofstream file(filePath, std::ios::binary);
106 file.write((char*)data.data(), data.size());
107 };
108
116 static void WriteAllBytes(const std::string& filePath, const char* data, int dataSize) {
117 if (!Directory::Exists(Path::GetDirectoryName(filePath))) {
118 Directory::MakeDirectory(Path::GetDirectoryName(filePath).string());
119 }
120 std::ofstream file(filePath, std::ios::binary);
121 file.write((char*)data, dataSize);
122 };
123
129 static void WriteAllText(const fs::path& filePath, const std::string& text) {
130 if (!Directory::Exists(Path::GetDirectoryName(filePath))) {
131 Directory::MakeDirectory(Path::GetDirectoryName(filePath).string());
132 }
133 std::ofstream file(filePath, std::ios::out | std::ios::binary);
134 file.write(text.c_str(), text.size());
135 }
136};