libfilezilla
file.hpp
Go to the documentation of this file.
1 #ifndef LIBFILEZILLA_FILE_HEADER
2 #define LIBFILEZILLA_FILE_HEADER
3 
4 #include "fsresult.hpp"
5 #include "libfilezilla.hpp"
6 
7 #ifdef FZ_WINDOWS
8 #include "glue/windows.hpp"
9 #endif
10 
15 #include <stdint.h>
16 
17 namespace fz {
18 
19 class datetime;
20 
28 class FZ_PUBLIC_SYMBOL file final
29 {
30 public:
31 #ifdef FZ_WINDOWS
32  typedef HANDLE file_t;
33 #else
34  typedef int file_t;
35 #endif
36 
38  enum mode {
39  reading,
40  writing,
41  readwrite
42  };
43 
52  existing = 0x1,
53 
55  empty = 0x2,
56 
63  current_user_only = 0x4,
64 
75  current_user_and_admins_only = 0x8
76  };
77 
78  file() = default;
79  file(native_string const& f, mode m, creation_flags d = existing);
80 
81 
86  explicit file(file_t fd);
87 
88  ~file();
89 
90  file(file const&) = delete;
91  file& operator=(file const&) = delete;
92 
93  file(file && op) noexcept;
94  file& operator=(file && op) noexcept;
95 
96  bool opened() const;
97  explicit operator bool() const { return opened(); }
98 
99  result open(native_string const& f, mode m, creation_flags d = existing);
100 
101  void close();
102 
104  file_t fd() {
105  return fd_;
106  }
107 
108  file_t detach();
109 
111  enum seek_mode {
114 
117 
119  end
120  };
121 
125  int64_t size() const;
126 
139  int64_t seek(int64_t offset, seek_mode m);
140 
142  int64_t position() { return seek(0, current); }
143 
149  bool truncate();
150 
164  rwresult read2(void *buf, size_t count);
165 
166  [[deprecated]]
167  inline int64_t read(void *buf, int64_t count) {
168  rwresult res = read2(buf, static_cast<size_t>(count));
169  return res ? res.value_ : -1;
170  }
171 
182  rwresult write2(void const* buf, size_t count);
183 
184  [[deprecated]]
185  inline int64_t write(void const* buf, int64_t count) {
186  rwresult res = write2(buf, static_cast<size_t>(count));
187  return res ? res.value_ : -1;
188  }
189 
195  bool fsync();
196 
201  bool set_modification_time(datetime const& t);
202 
203 private:
204 #ifdef FZ_WINDOWS
205  HANDLE fd_{INVALID_HANDLE_VALUE};
206 #else
207  int fd_{-1};
208 #endif
209 };
210 
220 result FZ_PUBLIC_SYMBOL remove_file(native_string const& name, bool missing_file_is_error);
221 
223 [[deprecated]] inline bool remove_file(native_string const& name) {
224  return bool(remove_file(name, false));
225 }
226 
228  return static_cast<file::creation_flags>(static_cast<std::underlying_type_t<file::creation_flags>>(lhs) | static_cast<std::underlying_type_t<file::creation_flags>>(rhs));
229 }
230 inline file::creation_flags& operator|=(file::creation_flags & lhs, file::creation_flags rhs) {
231  lhs = lhs | rhs;
232  return lhs;
233 }
234 
241 rwresult FZ_PUBLIC_SYMBOL read_file(fz::file & f, buffer & out, size_t max_size);
242 
243 }
244 #endif
Data has become available.
fz::result and fz::rwresult wrappers for dealing with file system errors.
result remove_file(native_string const &name, bool missing_file_is_error)
remove the specified file.
mode
Files can be opened for reading, writing, or both.
Definition: file.hpp:38
Holds the result of read/write operations.
Definition: fsresult.hpp:76
Seek from current position in the file.
Definition: file.hpp:116
int64_t position()
Get Current position in file.
Definition: file.hpp:142
std::wstring native_string
A string in the system's native character type and encoding. Note: This typedef changes depending on...
Definition: string.hpp:34
size_t value_
Undefined if error_ is not none.
Definition: fsresult.hpp:121
Seek from beginning of file.
Definition: file.hpp:113
The namespace used by libfilezilla.
Definition: apply.hpp:17
seek_mode
Used by seek.
Definition: file.hpp:111
creation_flags
Creation flags when opening file for writing.
Definition: file.hpp:50
Lean class for file access.
Definition: file.hpp:28
Sets some global macros and further includes string.hpp.
data can be written.
file_t fd()
Returns the raw file descriptor, but retains ownership.
Definition: file.hpp:104
rwresult read_file(fz::file &f, buffer &out, size_t max_size)
Reads the entire source file and appends if to the buffer.