mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2026-02-20 12:28:42 +01:00
Developer (#164)
- State before merging the new cluster vector API --------- Co-authored-by: Patrick <patrick.sieberer@psi.ch> Co-authored-by: JulianHeymes <julian.heymes@psi.ch> Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch> Co-authored-by: Xiangyu Xie <45243914+xiangyuxie@users.noreply.github.com> Co-authored-by: xiangyu.xie <xiangyu.xie@psi.ch> Co-authored-by: siebsi <sieb.patr@gmail.com>
This commit is contained in:
44
src/FilePtr.cpp
Normal file
44
src/FilePtr.cpp
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
#include "aare/FilePtr.hpp"
|
||||
#include <fmt/format.h>
|
||||
#include <stdexcept>
|
||||
#include <utility>
|
||||
|
||||
namespace aare {
|
||||
|
||||
FilePtr::FilePtr(const std::filesystem::path& fname, const std::string& mode = "rb") {
|
||||
fp_ = fopen(fname.c_str(), mode.c_str());
|
||||
if (!fp_)
|
||||
throw std::runtime_error(fmt::format("Could not open: {}", fname.c_str()));
|
||||
}
|
||||
|
||||
FilePtr::FilePtr(FilePtr &&other) { std::swap(fp_, other.fp_); }
|
||||
|
||||
FilePtr &FilePtr::operator=(FilePtr &&other) {
|
||||
std::swap(fp_, other.fp_);
|
||||
return *this;
|
||||
}
|
||||
|
||||
FILE *FilePtr::get() { return fp_; }
|
||||
|
||||
int64_t FilePtr::tell() {
|
||||
auto pos = ftell(fp_);
|
||||
if (pos == -1)
|
||||
throw std::runtime_error(fmt::format("Error getting file position: {}", error_msg()));
|
||||
return pos;
|
||||
}
|
||||
FilePtr::~FilePtr() {
|
||||
if (fp_)
|
||||
fclose(fp_); // check?
|
||||
}
|
||||
|
||||
std::string FilePtr::error_msg(){
|
||||
if (feof(fp_)) {
|
||||
return "End of file reached";
|
||||
}
|
||||
if (ferror(fp_)) {
|
||||
return fmt::format("Error reading file: {}", std::strerror(errno));
|
||||
}
|
||||
return "";
|
||||
}
|
||||
} // namespace aare
|
||||
Reference in New Issue
Block a user