mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-14 00:40:55 +08:00
104 lines
2.7 KiB
C++
104 lines
2.7 KiB
C++
#pragma once
|
||
#include "acl_cpp/acl_cpp_define.hpp"
|
||
#include "acl_cpp/stream/istream.hpp"
|
||
#include "acl_cpp/stream/ostream.hpp"
|
||
|
||
namespace acl {
|
||
|
||
class string;
|
||
|
||
class ACL_CPP_API fstream
|
||
: public istream
|
||
, public ostream
|
||
{
|
||
public:
|
||
fstream(void);
|
||
virtual ~fstream(void);
|
||
|
||
/**
|
||
* 根据文件路径打开文件流, 这是最基础的打开文件的方式
|
||
* @param path {const char*} 文件名
|
||
* @param oflags {unsigned int} 标志位, We're assuming that
|
||
* O_RDONLY: 0x0000, O_WRONLY: 0x0001, O_RDWR: 0x0002,
|
||
* O_APPEND: 0x0008, O_CREAT: 0x0100, O_TRUNC: 0x0200,
|
||
* O_EXCL: 0x0400; just for win32, O_TEXT: 0x4000,
|
||
* O_BINARY: 0x8000, O_RAW: O_BINARY, O_SEQUENTIAL: 0x0020,
|
||
* O_RANDOM: 0x0010.
|
||
* @param mode {int} 打开文件句柄时的模式(如: 0600)
|
||
* @return {bool} 打开文件是否成功
|
||
*/
|
||
bool open(const char* path, unsigned int oflags, int mode);
|
||
|
||
/**
|
||
* 以读/写方式打开文件流,当文件不存在时则创建新文件,当文件存在时则
|
||
* 将文件清空, 文件属性为 0700
|
||
* @param path {const char*} 文件名
|
||
* @return {bool} 打开文件是否成功
|
||
*/
|
||
bool open_trunc(const char* path);
|
||
|
||
/**
|
||
* 以读/写方式建新文件,文件属性为 0700, 若文件不存在则创建新文件,
|
||
* 若存在则打开旧文件
|
||
* @return {bool} 文件创建是否成功
|
||
*/
|
||
bool create(const char* path);
|
||
|
||
#if defined(_WIN32) || defined(_WIN64)
|
||
/**
|
||
* 根据系统的文件句柄打开 fstream 文件流对象
|
||
* @param fh 系统文件句柄
|
||
* @param oflags 打开标志位
|
||
*/
|
||
void open(void* fh, unsigned int oflags);
|
||
|
||
/**
|
||
* 移动文件指针位置
|
||
* @param offset {__int64} 偏移量
|
||
* @param whence {int} 移动方向:SEEK_SET(从文件起始位置后移动),
|
||
* SEEK_CUR(从当前文件指针位置向后移动), SEEK_END(从文件尾向前移动)
|
||
* @return {acl_off_t} 正常时返回值 >= 0,出错时返回 -1
|
||
*/
|
||
__int64 fseek(__int64 offset, int whence);
|
||
|
||
/**
|
||
* 获得当前系统文件指针在文件中的偏移位置
|
||
* @return {acl_off_t} 正常时返回值 >= 0,出错时返回 -1
|
||
*/
|
||
__int64 ftell();
|
||
|
||
/**
|
||
* 将文件尺寸截断至指定大小
|
||
* @param length {acl_off_t} 文件截断后的大小尺寸
|
||
* @return {bool} 是否成功
|
||
*/
|
||
bool ftruncate(__int64 length);
|
||
|
||
/**
|
||
* 获得当前文件的大小
|
||
* @return {acl_off_t} 正常时返回值 >= 0,出错返回 -1
|
||
*/
|
||
__int64 fsize(void) const;
|
||
|
||
/**
|
||
* 返回系统文件句柄
|
||
* @return 系统文件句柄,出错时返回 ACL_FILE_INVALID
|
||
*/
|
||
void* file_handle() const;
|
||
#else
|
||
void open(int fh, unsigned int oflags);
|
||
long long int fseek(long long int offset, int whence);
|
||
long long int ftell();
|
||
bool ftruncate(long long int length);
|
||
long long int fsize(void) const;
|
||
int file_handle() const;
|
||
#endif
|
||
/**
|
||
* 获得文件的全路径
|
||
* @return {const char*} 若返回空则表示文件还未打开或出错
|
||
*/
|
||
const char* file_path() const;
|
||
};
|
||
|
||
} // namespace acl
|