diff --git a/src/util/system.h b/src/util/system.h --- a/src/util/system.h +++ b/src/util/system.h @@ -63,6 +63,17 @@ bool DirIsWritable(const fs::path &directory); bool CheckDiskSpace(const fs::path &dir, uint64_t additional_bytes = 0); +/** + * Get the size of a file by scanning it. + * + * @param[in] path The file path + * @param[in] max Stop seeking beyond this limit + * @return The file size or max + */ +std::streampos +GetFileSize(const char *path, + std::streamsize max = std::numeric_limits::max()); + /** * Release all directory locks. This is used for unit testing only, at runtime * the global destructor will take care of the locks. diff --git a/src/util/system.cpp b/src/util/system.cpp --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -143,6 +143,12 @@ return free_bytes_available >= min_disk_space + additional_bytes; } +std::streampos GetFileSize(const char *path, std::streamsize max) { + std::ifstream file(path, std::ios::binary); + file.ignore(max); + return file.gcount(); +} + /** * Interpret a string argument as a boolean. *