acl  3.5.3.0
fstream.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "istream.hpp"
4 #include "ostream.hpp"
5 
6 namespace acl {
7 
8 class string;
9 
11  : public istream
12  , public ostream
13 {
14 public:
15  fstream(void);
16  virtual ~fstream(void);
17 
18  /**
19  * 根据文件路径打开文件流, 这是最基础的打开文件的方式
20  * @param path {const char*} 文件名
21  * @param oflags {unsigned int} 标志位, We're assuming that
22  * O_RDONLY: 0x0000, O_WRONLY: 0x0001, O_RDWR: 0x0002,
23  * O_APPEND: 0x0008, O_CREAT: 0x0100, O_TRUNC: 0x0200,
24  * O_EXCL: 0x0400; just for win32, O_TEXT: 0x4000,
25  * O_BINARY: 0x8000, O_RAW: O_BINARY, O_SEQUENTIAL: 0x0020,
26  * O_RANDOM: 0x0010.
27  * @param mode {int} 打开文件句柄时的模式(如: 0600)
28  * @return {bool} 打开文件是否成功
29  */
30  bool open(const char* path, unsigned int oflags, int mode);
31 
32  /**
33  * 以读/写方式打开文件流,当文件不存在时则创建新文件,当文件存在时则
34  * 将文件清空, 文件属性为 0700
35  * @param path {const char*} 文件名
36  * @return {bool} 打开文件是否成功
37  */
38  bool open_trunc(const char* path);
39 
40  /**
41  * 以读/写方式建新文件,文件属性为 0700, 若文件不存在则创建新文件,
42  * 若存在则打开旧文件
43  * @return {bool} 文件创建是否成功
44  */
45  bool create(const char* path);
46 
47  /**
48  * 将本类对象对应的文件从磁盘上删除,该函数只有当内部知道文件路径
49  * 时才能正确删除文件,否则无法删除
50  * @return {bool} 删除文件是否成功
51  */
52  bool remove(void);
53 
54  /**
55  * 将当前文件重命名为指定文件名,针对 WINDOWS 平台,需要先关闭当前文件
56  * 句柄,当重命名成功后再重新打开新的目标文件
57  * @param from_path {const char*} 源文件名
58  * @param to_path {const char*} 目标文件名
59  * @return {bool} 命名是否成功
60  */
61  bool rename(const char* from_path, const char* to_path);
62 
63 #if defined(_WIN32) || defined(_WIN64)
64  /**
65  * 根据系统的文件句柄打开 fstream 文件流对象
66  * @param fh 系统文件句柄
67  * @param oflags 打开标志位
68  * @param path {const char*} 非 NULL 时当被作为该文件句柄的文件路径
69  * 来存储,以便于 file_path, remove 使用
70  */
71  void open(void* fh, unsigned int oflags, const char* path = NULL);
72 
73  /**
74  * 移动文件指针位置
75  * @param offset {__int64} 偏移量
76  * @param whence {int} 移动方向:SEEK_SET(从文件起始位置后移动),
77  * SEEK_CUR(从当前文件指针位置向后移动), SEEK_END(从文件尾向前移动)
78  * @return {acl_off_t} 正常时返回值 >= 0,出错时返回 -1
79  */
80  __int64 fseek(__int64 offset, int whence);
81 
82  /**
83  * 获得当前系统文件指针在文件中的偏移位置
84  * @return {acl_off_t} 正常时返回值 >= 0,出错时返回 -1
85  */
86  __int64 ftell(void);
87 
88  /**
89  * 将文件尺寸截断至指定大小
90  * @param length {acl_off_t} 文件截断后的大小尺寸
91  * @return {bool} 是否成功
92  */
93  bool ftruncate(__int64 length);
94 
95  /**
96  * 获得当前文件的大小
97  * @return {acl_off_t} 正常时返回值 >= 0,出错返回 -1
98  */
99  __int64 fsize(void) const;
100 
101  /**
102  * 静态方法用于获取指定文件的文件大小
103  * @param path {const char*} 非空字符串指定文件路径
104  * @return {__int64} 正常时返回值 >= 0,出错时返回 -1
105  */
106  static __int64 fsize(const char* path);
107 
108  /**
109  * 返回系统文件句柄
110  * @return 系统文件句柄,出错时返回 ACL_FILE_INVALID
111  */
112  void* file_handle(void) const;
113 #else
114  void open(int fh, unsigned int oflags, const char* path = NULL);
115  long long int fseek(long long int offset, int whence);
116  long long int ftell(void);
117  bool ftruncate(long long int length);
118  long long int fsize(void) const;
119  static long long int fsize(const char* path);
120  int file_handle(void) const;
121 #endif
122  /**
123  * 获得文件的全路径
124  * @return {const char*} 若返回空则表示文件还未打开或出错
125  */
126  const char* file_path(void) const;
127 
128  /**
129  * 当文件打开后,该方法用来对文件加锁
130  * @param exclude {bool} 加锁方式是否是独占锁,默认是独占锁,如果该值
131  * 为 false, 则为共享锁
132  * @return {bool} 返回 false 表示加锁失败,可通过 acl::last_serror 查看
133  * 出错原因
134  */
135  bool lock(bool exclude = true);
136 
137  /**
138  * 当文件打开后,该方法用来尝试对文件加锁,如果加锁成功则返回 true,如
139  * 果该文件已经被其它进程加锁,则返回 false
140  * @param exclude {bool} 加锁方式是否是独占锁,默认是独占锁,如果该值
141  * 为 false, 则为共享锁
142  * @return {bool} 返回 false 表示加锁失败,可通过 acl::last_serror 查看
143  * 出错原因
144  */
145  bool try_lock(bool exclude = true);
146 
147  /**
148  * 当调用 lock 或 try_lock 成功后可以调用本方法对文件解锁
149  * @return {bool} 解锁是否成功
150  */
151  bool unlock(void);
152 };
153 
154 } // namespace acl
#define ACL_CPP_API