NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
file.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_FILE_FILE_HPP__
2#define NEFORCE_CORE_FILE_FILE_HPP__
3
10
11#include "NeForce/core/exception/error_code.hpp"
19NEFORCE_BEGIN_NAMESPACE__
20
26
43class NEFORCE_API file {
44public:
50 static constexpr size_t buffer_size = 8192;
51
59 public:
61 using reference = const string&;
62 using pointer = const string*;
65
66 private:
67 const file* file_ = nullptr;
68 mutable string current_line_;
69
70 public:
74 line_iterator() = default;
75
80 explicit line_iterator(const file* f);
81
86 reference operator*() const noexcept { return current_line_; }
87
92 pointer operator->() const noexcept { return &current_line_; }
93
99
105
111 bool operator==(const line_iterator& rhs) const noexcept { return file_ == rhs.file_; }
112
118 bool operator!=(const line_iterator& rhs) const noexcept { return !(*this == rhs); }
119 };
120
121#ifdef NEFORCE_PLATFORM_WINDOWS
122 using size_type = ::DWORD;
123 using difference_type = ::LONGLONG;
124 using native_handle_type = ::HANDLE;
125#else
127 using difference_type = ::off_t;
128 using native_handle_type = int;
129#endif
130
140
141private:
142 native_handle_type handle_;
143 path path_{};
144 bool opened_ = false;
145 bool append_mode_ = false;
146
147 size_type buffer_size_ = buffer_size;
148 mutable byte_vector read_buffer_{};
149 mutable size_type read_buffer_pos_ = 0;
150 mutable size_type read_buffer_size_ = 0;
151 mutable byte_vector write_buffer_{};
152 mutable size_type write_buffer_pos_ = 0;
153
154 mutable error_code last_error_code_;
155
156 unique_ptr<file_mapper> map_;
157 unique_ptr<file_locker> locker_;
158 unique_ptr<file_info> info_;
159 unique_ptr<file_async> async_;
160
161private:
162 void init_sub_objects() noexcept;
163 void reset_sub_objects() noexcept;
164
165 bool flush_write_buffer() const noexcept;
166 bool fill_read_buffer() const;
167
168 void set_last_error() const;
169
170 void adjust_buffer_size();
171
172public:
179
191 explicit file(path pth, bool append = false, file_access access = file_access::READ_WRITE,
193 file_attri attributes = file_attri::NORMAL);
194
195 file(const file&) = delete;
196 file& operator=(const file&) = delete;
197
202 file(file&& other) noexcept;
203
209 file& operator=(file&& other) noexcept;
210
217
228 bool open(path pth, bool append = false, file_access access = file_access::READ_WRITE,
231
241 bool open(bool append = false, file_access access = file_access::READ_WRITE,
244
250 void close() noexcept;
251
258 bool flush() noexcept;
259
267
273 size_type write(const string& data);
274
282
289 size_type read(void* buffer, size_type size) const;
290
297 size_type read(string& out, size_type size) const;
298
304 size_type read(string& out) const;
305
310 NEFORCE_NODISCARD string read() const;
311
319
326 size_type read_binary(string& out, size_type size) const;
327
333 size_type read_binary(string& out) const;
334
339 NEFORCE_NODISCARD string read_binary() const;
340
346 bool read_line(string& line) const;
347
352 NEFORCE_NODISCARD string read_line() const;
353
360 NEFORCE_NODISCARD vector<string> read_lines() const;
361
369 vector<string> read_chunks(size_type chunk_size = buffer_size * 16) const;
370
376 bool write_chunks(const vector<string>& chunks);
377
385 NEFORCE_NODISCARD vector<chunk_info> chunks_info(size_type chunk_size) const;
386
396
404
412
420 bool prefetch(size_type hint_size = 0) const;
421
431
436 NEFORCE_NODISCARD size_type size() const;
437
443 bool size(size_type& out_size) const;
444
449 NEFORCE_NODISCARD uint64_t size64() const;
450
455 NEFORCE_NODISCARD native_handle_type native_handle() const noexcept { return handle_; }
456
461 NEFORCE_NODISCARD const path& file_path() const noexcept { return path_; }
462
467 NEFORCE_NODISCARD bool is_opened() const noexcept { return opened_; }
468
473 NEFORCE_NODISCARD bool is_append() const noexcept { return append_mode_; }
474
479 NEFORCE_NODISCARD const error_code& last_error_code() const noexcept { return last_error_code_; }
480
484 void clear_error() noexcept;
485
490 NEFORCE_NODISCARD line_iterator begin_lines() const { return line_iterator(this); }
491
496 NEFORCE_NODISCARD line_iterator end_lines() const { return {}; }
497
502 NEFORCE_NODISCARD file_mapper& mapper() noexcept { return *map_; }
503 NEFORCE_NODISCARD const file_mapper& mapper() const noexcept { return *map_; }
504
509 NEFORCE_NODISCARD file_locker& locker() noexcept { return *locker_; }
510 NEFORCE_NODISCARD const file_locker& locker() const noexcept { return *locker_; }
511
516 NEFORCE_NODISCARD file_info& info() noexcept { return *info_; }
517 NEFORCE_NODISCARD const file_info& info() const noexcept { return *info_; }
518
523 NEFORCE_NODISCARD file_async& async() noexcept { return *async_; }
524 NEFORCE_NODISCARD const file_async& async() const noexcept { return *async_; }
525};
526 // File
528
529NEFORCE_END_NAMESPACE__
530#endif // NEFORCE_CORE_FILE_FILE_HPP__
line_iterator operator++(int)
后置递增操作符
const string * pointer
指针类型
const string & reference
引用类型
bool operator==(const line_iterator &rhs) const noexcept
相等比较操作符
line_iterator(const file *f)
构造函数
pointer operator->() const noexcept
成员访问操作符
bool operator!=(const line_iterator &rhs) const noexcept
不等比较操作符
reference operator*() const noexcept
解引用操作符
line_iterator()=default
默认构造函数(结束迭代器)
ptrdiff_t difference_type
差值类型
input_iterator_tag iterator_category
迭代器类别
line_iterator & operator++()
前置递增操作符
string value_type
元素类型
文件异步I/O管理类
文件属性与时间管理类
文件区域锁管理类
内存映射文件工具类
bool flush() noexcept
刷新缓冲区
NEFORCE_NODISCARD file_info & info() noexcept
获取文件信息对象
file()
默认构造函数
static constexpr size_t buffer_size
文件操作缓冲区大小
size_t size_type
大小类型
NEFORCE_NODISCARD size_type size() const
获取文件大小
int native_handle_type
原生文件句柄类型
NEFORCE_NODISCARD line_iterator end_lines() const
获取行迭代器结束
vector< string > read_chunks(size_type chunk_size=buffer_size *16) const
读取文件块
bool open(path pth, bool append=false, file_access access=file_access::READ_WRITE, file_shared share_mode=file_shared::SHARE_READ_WRITE, file_creation creation=file_creation::OPEN_EXIST, file_attri attributes=file_attri::NORMAL)
打开文件
NEFORCE_NODISCARD vector< chunk_info > chunks_info(size_type chunk_size) const
获取块信息
NEFORCE_NODISCARD vector< string > read_lines() const
读取所有行
::off_t difference_type
偏移量类型
void close() noexcept
关闭文件
bool write_chunks(const vector< string > &chunks)
写入文件块
size_type read(void *buffer, size_type size) const
读取数据到缓冲区
bool prefetch(size_type hint_size=0) const
预取数据到缓存
NEFORCE_NODISCARD file_mapper & mapper() noexcept
获取内存映射对象
NEFORCE_NODISCARD const error_code & last_error_code() const noexcept
获取最后错误码
NEFORCE_NODISCARD file_async & async() noexcept
获取异步I/O对象
bool read_line(string &line) const
读取一行
bool truncate(difference_type size) const
截断文件
difference_type tell() const
获取当前文件指针位置
NEFORCE_NODISCARD file_locker & locker() noexcept
获取文件锁对象
NEFORCE_NODISCARD uint64_t size64() const
获取文件大小
difference_type system_tell() const
获取系统文件指针位置
NEFORCE_NODISCARD bool is_append() const noexcept
检查是否为追加模式
NEFORCE_NODISCARD line_iterator begin_lines() const
获取行迭代器起始
void clear_error() noexcept
清除错误状态
bool seek(difference_type distance, file_pointer method=file_pointer::END) const
移动文件指针
NEFORCE_NODISCARD native_handle_type native_handle() const noexcept
获取原生文件句柄
size_type write(const string &data, size_type size)
写入数据
size_type read_binary(void *out, size_type size) const
读取二进制数据到缓冲区
NEFORCE_NODISCARD const path & file_path() const noexcept
获取文件路径
NEFORCE_NODISCARD bool is_opened() const noexcept
检查文件是否已打开
文件路径类
动态大小数组容器
异步文件I/O操作类
文件比较与差异分析工具
文件属性与时间信息管理
文件区域锁管理
内存映射文件管理
NEFORCE_NODISCARD future< async_result_t< Func, Args... > > async(launch policy, Func &&function, Args &&... args)
异步执行函数(指定策略)
vector< byte_t > byte_vector
字节向量类型别名
unsigned long long uint64_t
64位无符号整数类型
int native_handle_type
系统句柄类型
file_pointer
文件指针移动方式枚举
file_creation
文件创建方式枚举
file_shared
文件共享模式枚举
file_attri
文件属性和标志枚举
@ END
从文件结尾开始
@ OPEN_EXIST
仅打开已存在的文件
@ SHARE_READ_WRITE
允许其他进程读写
@ SHARE_READ
允许其他进程读取
@ NORMAL
普通文件
constexpr iter_difference_t< Iterator > distance(Iterator first, Iterator last)
计算两个迭代器之间的距离
uint64_t size_t
无符号大小类型
int64_t ptrdiff_t
指针差类型
basic_string< char > string
字符字符串
NEFORCE_NODISCARD NEFORCE_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
文件路径类
文件块信息
difference_type offset
块偏移
size_type size
块大小
size_type index
块索引
输入迭代器标签
独占智能指针