libdnf5::utils::fs

class File
#include <file.hpp>

A wrapper for a FILE * that handles opening and closing a file in RAII fashion. Errors are handled by raising instances of libdnf5::FileSystemError so that there’s a single exception type being raised for all filesystem-related errors.

Public Functions

File()

Creates an instance of File without opening any file.

File(const std::filesystem::path &path, const char *mode, bool use_solv_xfopen = false)

Creates an instance of File and opens the file at path using mode mode.

Parameters:
  • path – The path of the file.

  • mode – The mode for opening the file.

  • use_solv_xfopen – Use libsolv’s solv_xfopen to transparently work with compressed files (based on filename extension).

File(int fd, const std::filesystem::path &path, const char *mode, bool use_solv_xfopen_fd = false)

Creates an instance of File by opening file descriptor fd. The path argument is only used for error reporting and for retrieving from the object via get_path().

Parameters:
  • fd – The file descriptor to call fdopen() on.

  • path – The path of the file, for error reporting etc.

  • mode – The mode for opening the file.

  • use_solv_xfopen_fd – Use libsolv’s solv_xfopen_fd to transparently work with compressed files (based on filename extension).

File(const File&) = delete
File &operator=(const File&) = delete
File(File &&f) noexcept
File &operator=(File &&f)
~File()
void open(const std::filesystem::path &path, const char *mode, bool use_solv_xfopen = false)

Opens the file at path using mode mode. If this object already has an open file, closes it first before opening the new one.

Parameters:
  • path – The path of the file.

  • mode – The mode for opening the file.

  • use_solv_xfopen – Use libsolv’s solv_xfopen to transparently work with compressed files (based on filename extension).

void open(int fd, const std::filesystem::path &path, const char *mode, bool use_solv_xfopen_fd = false)

Opens the file by opening file descriptor fd (via fdopen()). The path argument is only used for error reporting and for retrieving from the object via get_path().

Parameters:
  • fd – The file descriptor to call fdopen() on.

  • path – The path of the file, for error reporting etc.

  • mode – The mode for opening the file.

  • use_solv_xfopen_fd – Use libsolv’s solv_xfopen_fd to transparently work with compressed files (based on filename extension).

void close()

Close the file.

std::FILE *release() noexcept

Releases the file, meaning it will no longer be closed on destruction.

std::size_t read(void *buffer, std::size_t count)

Reads at most count chars into buffer. If EOF is reached, returns a number smaller than count.

Parameters:
  • buffer – The data buffer to read into.

  • count – The size of buffer.

Returns:

The number of chars read.

void write(const void *buffer, std::size_t count)

Writes count chars from `buffer.

Parameters:
  • buffer – The data buffer to write.

  • count – The number of chars to write from buffer.

bool getc(char &c)

Reads a single char from the file.

Parameters:

c – The char variable to read to.

Returns:

true if char was read, false in case EOF was reached.

void putc(char c)

Writes a single char to the file.

Parameters:

c – The char to write.

void flush()

Flushes the data from the internal FILE stream buffer.

void seek(long offset, int whence)

Seeks to offset relative to whence. The values for whence are SEEK_SET, SEEK_CUR and SEEK_END, directly from the <cstdio> header.

Parameters:
  • offset – The offset to seek to.

  • whence – The relative position to seek from.

long tell() const
Returns:

The current position indicator value of the FILE stream.

void rewind()

Rewinds the FILE stream to the beginning.

bool is_at_eof() const
Returns:

Whether the current position indicator is at the end of file (EOF).

std::string read(std::size_t count = 0)

Reads the contents of the file from current position to the end or until count chars are read.

It will try to detect the number of characters in the file until the end. If the detection is successful, the required memory is allocated at once. Otherwise, the fallback solution reads the file block by block and reallocates memory.

Parameters:

count – The maximum number of characters to read, 0 to read till the end.

Returns:

The contents read from the file.

bool read_line(std::string &line)

Reads a single line of the file.

Parameters:

line – The string variable to read the line into.

Returns:

true if line was read, false in case EOF was reached.

void write(std::string_view data)

Writes data into the file.

Parameters:

data – The data to write.

explicit operator bool() const noexcept
Returns:

Whether this object contains an open file.

const std::filesystem::path &get_path() const noexcept

Returns the associated file path.

Returns:

The associated file path.

std::FILE *get() const noexcept

Returns the associated open stream or nullptr.

Returns:

The associated open stream or nullptr.

int get_fd() const

Returns the associated open file descriptor. The operation requires an open file. Throws a libdnf5::FileSystemError exception if an error occurs.

Returns:

The associated open file descriptor.

class TempDir
#include <temp.hpp>

Object that creates and holds a temp directory. The directory gets removed when the object is deleted.

Public Functions

explicit TempDir(const std::string &name_prefix)

Creates a temporary directory in the system temporary directory path.

TempDir(std::filesystem::path destdir, const std::string &name_prefix)

Creates a temporary directory in destdir.

TempDir(const TempDir&) = delete
TempDir(TempDir &&src) noexcept
TempDir &operator=(const TempDir&) = delete
TempDir &operator=(TempDir &&src) noexcept
~TempDir()
void release() noexcept

Releases the temporary directory, meaning it will no longer be deleted on destruction.

inline const std::filesystem::path &get_path() const noexcept
class TempFile
#include <temp.hpp>

A mkstemp wrapper that creates and owns a temporary file, which will be deleted in the destructor unless released. Throws instances of libdnf5::FileSystemError on any I/O failure.

Public Functions

explicit TempFile(const std::string &name_prefix)

Creates a temporary file in the system temporary directory path.

Parameters:

name_prefix – The prefix of the filename to which “.XXXXXX” will be appended.

TempFile(std::filesystem::path destdir, const std::string &name_prefix)

Creates a temporary file in destdir.

Parameters:
  • destdir – The directory in which the file will be created.

  • name_prefix – The prefix of the filename to which “.XXXXXX” will be appended.

TempFile(const TempFile&) = delete
TempFile(TempFile &&src) noexcept
TempFile &operator=(const TempFile&) = delete
TempFile &operator=(TempFile&&)
~TempFile()
File &open_as_file(const char *mode)

Open the TempFile as a File object.

Parameters:

mode – The mode for the file, passed to ::fdopen().

void close()

If this TempFile has been opened as File (via open_as_file()), unsets and destroys that File (automatically closing upon destruction). Otherwise closes the open file descriptor.

void release() noexcept

Releases the temporary file, meaning it will no longer be closed or deleted on destruction. If open as File (via open_as_file()), releases the File by calling its release() method and unsets and destroys the File.

inline const std::filesystem::path &get_path() const noexcept
inline int get_fd() const noexcept
inline std::optional<File> &get_file() noexcept