acl/lib_acl_cpp/include/acl_cpp/stream/fstream.hpp

102 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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