1#ifndef NEFORCE_CORE_FILE_FILE_HPP__
2#define NEFORCE_CORE_FILE_FILE_HPP__
11#include "NeForce/core/exception/error_code.hpp"
19NEFORCE_BEGIN_NAMESPACE__
67 const file* file_ =
nullptr;
68 mutable string current_line_;
121#ifdef NEFORCE_PLATFORM_WINDOWS
122 using size_type = ::DWORD;
123 using difference_type = ::LONGLONG;
144 bool opened_ =
false;
145 bool append_mode_ =
false;
147 size_type buffer_size_ = buffer_size;
149 mutable size_type read_buffer_pos_ = 0;
150 mutable size_type read_buffer_size_ = 0;
152 mutable size_type write_buffer_pos_ = 0;
154 mutable error_code last_error_code_;
156 unique_ptr<file_mapper> map_;
157 unique_ptr<file_locker> locker_;
158 unique_ptr<file_info> info_;
159 unique_ptr<file_async> async_;
162 void init_sub_objects() noexcept;
163 void reset_sub_objects() noexcept;
165 bool flush_write_buffer() const noexcept;
166 bool fill_read_buffer() const;
168 void set_last_error() const;
170 void adjust_buffer_size();
191 explicit
file(
path pth,
bool append = false, file_access access = file_access::READ_WRITE,
196 file& operator=(const
file&) = delete;
228 bool open(
path pth,
bool append = false, file_access access = file_access::READ_WRITE,
241 bool open(
bool append = false, file_access access = file_access::READ_WRITE,
310 NEFORCE_NODISCARD
string read() const;
467 NEFORCE_NODISCARD
bool is_opened() const noexcept {
return opened_; }
473 NEFORCE_NODISCARD
bool is_append() const noexcept {
return append_mode_; }
479 NEFORCE_NODISCARD
const error_code&
last_error_code() const noexcept {
return last_error_code_; }
503 NEFORCE_NODISCARD
const file_mapper& mapper() const noexcept {
return *map_; }
510 NEFORCE_NODISCARD
const file_locker& locker() const noexcept {
return *locker_; }
517 NEFORCE_NODISCARD
const file_info& info() const noexcept {
return *info_; }
524 NEFORCE_NODISCARD
const file_async&
async() const noexcept {
return *async_; }
529NEFORCE_END_NAMESPACE__
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++()
前置递增操作符
bool flush() noexcept
刷新缓冲区
NEFORCE_NODISCARD file_info & info() noexcept
获取文件信息对象
static constexpr size_t buffer_size
文件操作缓冲区大小
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
检查文件是否已打开
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
系统句柄类型
@ SHARE_READ_WRITE
允许其他进程读写
constexpr iter_difference_t< Iterator > distance(Iterator first, Iterator last)
计算两个迭代器之间的距离
basic_string< char > string
字符字符串
NEFORCE_NODISCARD NEFORCE_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
difference_type offset
块偏移