6#ifndef ACTIVE_FILE_FILE
7#define ACTIVE_FILE_FILE
9#include "Active/File/Interface/FSNode.h"
10#include "Active/File/Interface/IOBase.h"
11#include "Active/Utility/Memory.h"
24 using enum utility::TextEncoding;
29 using Unique = std::unique_ptr<File>;
31 using Shared = std::shared_ptr<File>;
78 File(
const Path& path,
Permission perm = readWrite,
bool isMissingCreated =
false,
bool canReplaceDirectory =
false);
89 bool isMissingCreated =
false,
bool canReplaceDirectory =
false);
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; }
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; }
244 virtual void remove(
bool isRecursive =
true)
override;
255 virtual void clear(
flag_type f = std::ios_base::goodbit)
override {
if (m_file) m_file->clear(f); }
268 void validate(
bool confirmOpen =
true)
const;
271 mutable std::unique_ptr<std::fstream> m_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
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