Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
FileSystem.h
1// Copyright (c) Stefano Cristiano
2// SPDX-License-Identifier: MIT
3#pragma once
4#include "../Foundation/Buffer.h"
5#include "../Strings/String.h"
6#include "FileSystemOperations.h"
7namespace SC
8{
11
14
22{
23 private:
24 StringNative<512> currentDirectory = StringEncoding::Native;
25
26 public:
27 bool preciseErrorMessages = false;
28
32 Result init(StringView initialDirectory);
33
38
41
49
56 [[nodiscard]] Result copyFiles(Span<const CopyOperation> sourceDestination);
57
66 [[nodiscard]] Result copyFile(StringView source, StringView destination, CopyFlags copyFlags = CopyFlags())
67 {
68 return copyFiles(CopyOperation{source, destination, copyFlags});
69 }
70
75 [[nodiscard]] Result copyDirectories(Span<const CopyOperation> sourceDestination);
76
85 [[nodiscard]] Result copyDirectory(StringView source, StringView destination, CopyFlags copyFlags = CopyFlags())
86 {
87 return copyDirectories(CopyOperation{source, destination, copyFlags});
88 }
89
98 [[nodiscard]] Result rename(StringView path, StringView newPath);
99
104
109 [[nodiscard]] Result removeFile(StringView source) { return removeFiles({source}); }
110
114 [[nodiscard]] Result removeFileIfExists(StringView source);
115
119 [[nodiscard]] Result removeLinkIfExists(StringView source);
120
126
134 {
135 return removeDirectoriesRecursive({directory});
136 }
137
143
148 [[nodiscard]] Result removeEmptyDirectory(StringView directory) { return removeEmptyDirectories({directory}); }
149
155
161 {
162 return removeEmptyDirectoriesRecursive({directory});
163 }
164
170
175 [[nodiscard]] Result makeDirectory(StringView directory) { return makeDirectories({directory}); }
176
181
186 {
187 return makeDirectoriesIfNotExists({directory});
188 }
189
195
200 [[nodiscard]] Result makeDirectoryRecursive(StringView directory) { return makeDirectoriesRecursive({directory}); }
201
206 [[nodiscard]] Result createSymbolicLink(StringView sourceFileOrDirectory, StringView linkFile);
207
212 [[nodiscard]] bool exists(StringView fileOrDirectory);
213
217 [[nodiscard]] bool existsAndIsDirectory(StringView directory);
218
225 [[nodiscard]] bool existsAndIsFile(StringView file);
226
230 [[nodiscard]] bool existsAndIsLink(StringView file);
231
236 [[nodiscard]] bool moveDirectory(StringView sourceDirectory, StringView destinationDirectory);
237
245 [[nodiscard]] Result write(StringView file, Span<const char> data);
246 [[nodiscard]] Result write(StringView file, Span<const uint8_t> data);
247
253 [[nodiscard]] Result read(StringView file, Buffer& data);
254
260 [[nodiscard]] Result writeString(StringView file, StringView text);
261
267
274 [[nodiscard]] Result read(StringView file, String& data, StringEncoding encoding);
275
278
283 [[nodiscard]] Result getFileStat(StringView file, FileStat& fileStat);
284
290
291 private:
292 [[nodiscard]] bool convert(const StringView file, String& destination, StringView* encodedPath = nullptr);
293
294 StringNative<128> fileFormatBuffer1 = StringEncoding::Native;
295 StringNative<128> fileFormatBuffer2 = StringEncoding::Native;
296 StringNative<128> errorMessageBuffer = StringEncoding::Native;
297
298 Result formatError(int errorNumber, StringView item, bool isWindowsNativeError);
299 struct Internal;
300
301 // Fallbacks
302 [[nodiscard]] static Result fallbackCopyDirectory(String& sourceDirectory, String& destinationDirectory,
303 FileSystem::CopyFlags options);
304 [[nodiscard]] static Result fallbackRemoveDirectoryRecursive(String& sourceDirectory);
305};
307} // namespace SC
#define SC_COMPILER_EXPORT
Macro for symbol visibility in non-MSVC compilers.
Definition Compiler.h:78
An heap allocated byte buffer that can optionally use an inline buffer.
Definition Buffer.h:28
A structure to describe copy flags.
Definition FileSystemOperations.h:19
A structure to describe file stats.
Definition FileSystemOperations.h:12
Specify source, destination and flags for a copy operation.
Definition FileSystem.h:44
StringView destination
Copy operation sink (can be a {relative | absolute} {file | directory} path)
Definition FileSystem.h:46
CopyFlags copyFlags
Copy operation flags (overwrite, use clone api etc.)
Definition FileSystem.h:47
StringView source
Copy operation source (can be a {relative | absolute} {file | directory} path)
Definition FileSystem.h:45
Execute fs operations { exists, copy, delete } for { files and directories }.
Definition FileSystem.h:22
Result createSymbolicLink(StringView sourceFileOrDirectory, StringView linkFile)
Creates a symbolic link at location linkFile pointing at sourceFileOrDirectory.
Result changeDirectory(StringView newDirectory)
Changes current directory.
Result removeEmptyDirectories(Span< const StringView > directories)
Removes multiple empty directories.
Result rename(StringView path, StringView newPath)
Rename a file or directory.
bool existsAndIsFile(StringView file)
Check if a file exists at given path.
Result copyDirectory(StringView source, StringView destination, CopyFlags copyFlags=CopyFlags())
Copy a single directory.
Definition FileSystem.h:85
Result writeString(StringView file, StringView text)
Replace the entire content of a file with the provided StringView.
Result removeFile(StringView source)
Remove a single file.
Definition FileSystem.h:109
Result removeEmptyDirectoryRecursive(StringView directory)
Removes an empty directory that only contains other empty directories (but no files)
Definition FileSystem.h:160
Result makeDirectoriesRecursive(Span< const StringView > directories)
Create new directories, creating also intermediate non existing directories (like posix mkdir -p)
Result init(StringView initialDirectory)
Call init function when instantiating the class to set directory for all operations using relative pa...
Result copyFiles(Span< const CopyOperation > sourceDestination)
Copies many files.
bool exists(StringView fileOrDirectory)
Check if a file or directory exists at a given path.
Result makeDirectories(Span< const StringView > directories)
Creates new directories that do not already exist.
Result write(StringView file, Span< const char > data)
Writes a block of memory to a file.
Result setLastModifiedTime(StringView file, Time::Realtime time)
Change last modified time of a given file.
Result getFileStat(StringView file, FileStat &fileStat)
Obtains stats (size, modified time) about a file.
Result removeEmptyDirectoriesRecursive(Span< const StringView > directories)
Removes multiple empty directories that only contains other empty directories (but no files)
bool existsAndIsLink(StringView file)
Check if a link exists at given path.
Result removeFileIfExists(StringView source)
Remove a single file, giving no error if it doesn't exist.
Result removeLinkIfExists(StringView source)
Remove a single link, giving no error if it doesn't exist.
Result removeDirectoryRecursive(StringView directory)
Remove single directory with its entire content (like posix rm -rf)
Definition FileSystem.h:133
Result removeEmptyDirectory(StringView directory)
Removes an empty directory.
Definition FileSystem.h:148
Result removeFiles(Span< const StringView > files)
Remove multiple files.
Result writeStringAppend(StringView file, StringView text)
Appends a StringView to a file.
bool existsAndIsDirectory(StringView directory)
Check if a directory exists at given path.
Result read(StringView file, Buffer &data)
Reads contents of a file into a SC::Buffer.
Result copyDirectories(Span< const CopyOperation > sourceDestination)
Copy many directories.
bool moveDirectory(StringView sourceDirectory, StringView destinationDirectory)
Moves a directory from source to destination.
Result copyFile(StringView source, StringView destination, CopyFlags copyFlags=CopyFlags())
Copy a single file.
Definition FileSystem.h:66
Result makeDirectoryRecursive(StringView directory)
Create a new directory, creating also intermediate non existing directories (like posix mkdir -p)
Definition FileSystem.h:200
Result makeDirectory(StringView directory)
Creates a new directory that does not already exist.
Definition FileSystem.h:175
Result removeDirectoriesRecursive(Span< const StringView > directories)
Remove multiple directories with their entire content (like posix rm -rf)
Result read(StringView file, String &data, StringEncoding encoding)
Read contents of a file into a string with given encoding.
Result makeDirectoriesIfNotExists(Span< const StringView > directories)
Creates new directories, if they don't already exist at the given path.
Result makeDirectoryIfNotExists(StringView directory)
Creates a new directory, if it doesn't already exists at the given path.
Definition FileSystem.h:185
An ascii string used as boolean result. SC_TRY macro forwards errors to caller.
Definition Result.h:12
String with compile time configurable inline storage (small string optimization)
Definition StringFormat.h:11
View over a contiguous sequence of items (pointer + size in elements).
Definition Span.h:29
Non-owning view over a range of characters with UTF Encoding.
Definition StringView.h:48
A non-modifiable owning string with associated encoding.
Definition String.h:29
Represents a realtime clock in milliseconds since epoch (use Realtime::now for current time)
Definition Time.h:192