ActiveLib
Loading...
Searching...
No Matches
File.h
1
6#ifndef ACTIVE_FILE_FILE
7#define ACTIVE_FILE_FILE
8
9#include "Active/File/Interface/FSNode.h"
10#include "Active/File/Interface/IOBase.h"
11#include "Active/Utility/Memory.h"
12
13#include <fstream>
14#include <optional>
15
16namespace active::file {
17
18 class Directory;
19
21 class File : public FSNode, public IOBase {
22 public:
23
24 using enum utility::TextEncoding;
25
26 // MARK: - Types
27
29 using Unique = std::unique_ptr<File>;
31 using Shared = std::shared_ptr<File>;
33 enum Anchor {
34 start,
35 current,
36 end,
37 };
38
40 using size_type = std::fstream::off_type;
42 using sizeOption = std::optional<size_type>;
44 using pos_type = std::fstream::pos_type;
46 using posOption = std::optional<pos_type>;
47
49 enum class Permission {
50 readOnly,
51 writeOnly,
52 overWrite,
53 readWrite,
54 append
55 };
56
57 using enum Permission;
58
59 // MARK: - Constants
60
63
64 // MARK: - Constructors
65
69 File();
78 File(const Path& path, Permission perm = readWrite, bool isMissingCreated = false, bool canReplaceDirectory = false);
88 File(const Directory& parent, const utility::String& name, Permission perm = readWrite,
89 bool isMissingCreated = false, bool canReplaceDirectory = false);
94 File(const File& source);
98 virtual ~File();
99
104 virtual File* clonePtr() const override { return new File(*this); }
105
106 // MARK: - Operators
107
108 //Operators
113 void operator= (const File& source);
119 bool operator== (const File& ref) const;
120
121 // MARK: - Functions (const)
122
128 void open(std::optional<Permission> perm = std::nullopt) const;
132 void close() const noexcept;
137 bool isOpen() const noexcept;
142 bool isWritable() const noexcept { return m_permission != readOnly; }
148 pos_type getPosition() const;
154 void setPosition(pos_type pos) const;
161 void setPosition(size_type pos, Anchor anchor = Anchor::start) const;
167 size_type size() const;
173 size_type remaining() const;
181 size_type read(utility::String& text, sizeOption howMany = std::nullopt, utility::TextEncoding encoding = UTF8) const;
189 size_type read(utility::Memory& memory, sizeOption howMany = std::nullopt) const;
194 virtual bool good() const noexcept override { return m_file ? m_file->good() : false; }
199 virtual bool eof() const noexcept override { return m_file ? m_file->eof() : true; }
204 virtual bool fail() const noexcept override { return m_file ? m_file->fail() : true; }
209 virtual bool bad() const noexcept override { return m_file ? m_file->bad() : true; }
210
211 // MARK: - Functions (mutating)
217 void resize(size_type fileSize);
225 void write(const utility::String& text, utility::String::sizeOption howMany = std::nullopt, utility::TextEncoding encoding = UTF8);
232 void write(const utility::Memory& data, sizeOption howMany = std::nullopt);
238 bool write(const File& file);
244 virtual void remove(bool isRecursive = true) override;
249 void flush();
255 virtual void clear(flag_type f = std::ios_base::goodbit) override { if (m_file) m_file->clear(f); }
260 virtual void setState(flag_type f) noexcept override { if (m_file) m_file->setstate(f); }
261
262 private:
268 void validate(bool confirmOpen = true) const;
269
271 mutable std::unique_ptr<std::fstream> m_file;
273 mutable Permission m_permission;
274 };
275
276}
277
278#endif //ACTIVE_FILE_FILE
Class to represent a directory.
Definition Directory.h:15
Class to represent a file system node (directory, file etc)
Definition FSNode.h:19
Class to represent a file.
Definition File.h:21
virtual File * clonePtr() const override
Definition File.h:104
virtual bool fail() const noexcept override
Definition File.h:204
std::unique_ptr< File > Unique
Unique pointer.
Definition File.h:29
std::optional< size_type > sizeOption
Optional size - used for unspecified size or position.
Definition File.h:42
std::optional< pos_type > posOption
Optional position.
Definition File.h:46
void open(std::optional< Permission > perm=std::nullopt) const
Definition File.cpp:160
static const size_type defBufferSize
The default buffer size for file i/o.
Definition File.h:62
Anchor
File position anchors.
Definition File.h:33
std::fstream::off_type size_type
File size or absolute position type.
Definition File.h:40
void operator=(const File &source)
Definition File.cpp:133
std::shared_ptr< File > Shared
Shared pointer.
Definition File.h:31
virtual bool bad() const noexcept override
Definition File.h:209
virtual void remove(bool isRecursive=true) override
Definition File.cpp:399
virtual void clear(flag_type f=std::ios_base::goodbit) override
Definition File.h:255
bool isWritable() const noexcept
Definition File.h:142
virtual void setState(flag_type f) noexcept override
Definition File.h:260
size_type read(utility::String &text, sizeOption howMany=std::nullopt, utility::TextEncoding encoding=UTF8) const
Definition File.cpp:264
size_type remaining() const
Definition File.cpp:251
Permission
File permissions.
Definition File.h:49
void setPosition(pos_type pos) const
Definition File.cpp:207
std::fstream::pos_type pos_type
File position type.
Definition File.h:44
virtual bool eof() const noexcept override
Definition File.h:199
void close() const noexcept
Definition File.cpp:183
bool operator==(const File &ref) const
Definition File.cpp:150
pos_type getPosition() const
Definition File.cpp:195
virtual ~File()
Definition File.cpp:123
bool isOpen() const noexcept
Definition File.cpp:230
size_type size() const
Definition File.cpp:240
void resize(size_type fileSize)
Definition File.cpp:318
File()
Definition File.cpp:66
virtual bool good() const noexcept override
Definition File.h:194
void write(const utility::String &text, utility::String::sizeOption howMany=std::nullopt, utility::TextEncoding encoding=UTF8)
Definition File.cpp:333
void flush()
Definition File.cpp:410
Definition IOBase.h:13
std::ios_base::iostate flag_type
The state flag representation type.
Definition IOBase.h:19
Class to represent the path of a node in the local file system.
Definition Path.h:17
Class representing (and optionally allocating) memory with a specified location and size.
Definition Memory.h:18
A Unicode-aware string class.
Definition String.h:51
std::optional< size_type > sizeOption
Optional size type (used to indicate an unspecified or non-existant position)
Definition String.h:67
Definition Directory.h:12