51 template <
class CharT =
char>
58 using Bytes = std::vector<unsigned char>;
72 for (
auto &ch :
path) {
73 if (ch ==
static_cast<CharT
>(
'/'))
74 ch =
static_cast<CharT
>(
'\\');
105 return std::string(
path.begin(),
path.end());
113 template <
class T = CharT>
114 static typename std::enable_if<std::is_same<T, char>::value,
125 template <
class T = CharT>
126 static typename std::enable_if<std::is_same<T, wchar_t>::value,
137 template <
class T = CharT>
138 static typename std::enable_if<std::is_same<T, char>::value,
void>::type
148 template <
class T = CharT>
150 typename std::enable_if<std::is_same<T, wchar_t>::value,
void>::type
152 fout << std::string(text.begin(), text.end());
161 std::ifstream fin(
narrow());
164 std::string buf{std::istreambuf_iterator<char>(fin),
165 std::istreambuf_iterator<char>()};
166 if (fin.fail() && !fin.eof())
168 "The Stream of \"" +
narrow() +
"\" is Not Good");
177 std::ifstream fin(
narrow(), std::ios::binary);
180 Bytes bytes{std::istreambuf_iterator<char>(fin),
181 std::istreambuf_iterator<char>()};
182 if (fin.fail() && !fin.eof())
184 "The Stream of \"" +
narrow() +
"\" is Not Good");
194 if (text.empty())
return {};
204 static_assert(std::is_trivially_copyable<T>::value,
205 "This Type is Not POD Type!");
206 std::ifstream fin(
narrow(), std::ios::binary);
210 fin.read((
char *)(&data),
sizeof(data));
213 "The Stream of \"" +
narrow() +
"\" is Not Good");
223 std::ifstream fin(
narrow(), std::ios::binary);
227 fin.read((
char *)(&data),
sizeof(data));
230 "The Stream of \"" +
narrow() +
"\" is Not Good");
239 std::ofstream fout(
narrow());
245 "The Stream of \"" +
narrow() +
"\" is Not Good");
253 std::ofstream fout(
narrow(), std::ios::binary);
256 fout.write((
const char *)(bts.data()), bts.size());
259 "The Stream of \"" +
narrow() +
"\" is Not Good");
267 std::ofstream fout(
narrow(), std::ios::binary);
268 if (lines.empty())
return;
272 for (
size_t i = 1; i < lines.size(); ++i) {
278 "The Stream of \"" +
narrow() +
"\" is Not Good");
287 static_assert(std::is_trivially_copyable<T>::value,
288 "This Type is Not POD Type!");
289 std::ofstream fout(
narrow(), std::ios::binary);
292 fout.write((
const char *)(&data),
sizeof(data));
295 "The Stream of \"" +
narrow() +
"\" is Not Good");
304 std::ofstream fout(
narrow(), std::ios::binary);
307 fout.write((
const char *)(&data),
sizeof(data));
310 "The Stream of \"" +
narrow() +
"\" is Not Good");
336 if (std::remove(
narrow().c_str()) != 0)
350 std::fstream
stream(std::ios_base::openmode mode
351 = std::ios_base::in | std::ios_base::out)
const {
352 return std::fstream(
narrow(), mode);
文件路径封装类,提供便捷的文件读写和路径操作。
Definition file.h:52
static std::enable_if< std::is_same< T, wchar_t >::value, void >::type write_to_stream(std::ofstream &fout, const string_type &text)
根据字符类型选择宽字符或窄字符转换函数。
Definition file.h:151
void write_binary(const Bytes &bts) const
写入二进制内容。
Definition file.h:252
string_type read_text() const
读取文本文件内容。
Definition file.h:160
void unsafe_write_POD(const T &data) const
写入 POD 类型数据(不安全)。
Definition file.h:303
bool exists() const
判断文件是否存在。
Definition file.h:318
static std::enable_if< std::is_same< T, char >::value, void >::type write_to_stream(std::ofstream &fout, const string_type &text)
根据字符类型选择宽字符或窄字符转换函数。
Definition file.h:139
friend BasicPath operator/(const BasicPath &p1, const BasicPath &p2)
重载运算符,用于路径拼接。
Definition file.h:85
void write_POD(const T &data) const
写入 POD 类型数据。
Definition file.h:286
static std::enable_if< std::is_same< T, wchar_t >::value, string_type >::type widen_or_pass(const std::string &s)
根据字符类型选择宽字符或窄字符转换函数。
Definition file.h:128
void remove() const
删除文件(若存在)。
Definition file.h:335
std::vector< string_type > read_lines() const
读取文本文件的行内容。
Definition file.h:192
void touch() const
创建文件(若不存在)。
Definition file.h:324
std::vector< unsigned char > Bytes
字节向量类型
Definition file.h:58
BasicPath(const string_type &str)
构造函数,接受一个字符串作为路径字符串。
Definition file.h:70
std::basic_string< CharT > string_type
字符串类型
Definition file.h:53
Bytes read_binary() const
读取二进制文件内容。
Definition file.h:176
static std::enable_if< std::is_same< T, char >::value, string_type >::type widen_or_pass(const std::string &s)
根据字符类型选择宽字符或窄字符转换函数。
Definition file.h:116
std::string narrow() const
将宽字符路径转换为窄字符路径。
Definition file.h:104
void write_text(const string_type &text) const
写入文本内容。
Definition file.h:238
T unsafe_read_POD() const
读取 POD 类型数据(不安全)。
Definition file.h:222
void write_lines(const std::vector< string_type > &lines) const
写入行内容。
Definition file.h:266
T read_POD() const
读取 POD 类型数据。
Definition file.h:203
std::fstream stream(std::ios_base::openmode mode=std::ios_base::in|std::ios_base::out) const
以指定模式打开文件流。
Definition file.h:350
void ensure() const
确保文件存在(若不存在则创建)。
Definition file.h:330
const string_type & str() const
Definition file.h:343
string_type path
Definition file.h:55
BasicPath & operator/=(const BasicPath &p)
重载运算符,用于路径拼接。
Definition file.h:94
BasicPath(const CharT *str)
构造函数,接受一个字符指针作为路径字符串。
Definition file.h:64
FileError(const std::string &msg)
构造 FileError。
Definition csexc.h:87
定义 console 库使用的自定义异常类层次结构。
std::vector< std::basic_string< CharT, Traits, Allocator > > split(const std::basic_string< CharT, Traits, Allocator > &text, const std::basic_string< CharT, Traits, Allocator > &sep=std::basic_string< CharT, Traits, Allocator >(1, CharT{' '}))
以分隔符分割字符串(类似 Python 的 split,默认按空格分割)。
Definition strpp.h:324
BasicPath< char > Path
窄字符路径类型。
Definition file.h:357
BasicPath< wchar_t > WPath
宽字符路径类型。
Definition file.h:359