94 bool result = file.is_open();
98 bool open(
const char *name,
int flags) {
99 this->filename = name;
101 int rc = stat(name, &info);
102 if ((flags == O_RDONLY) && rc == -1){
105 }
else if (rc == 0 && info.st_mode & S_IFDIR) {
110 dir_path = std::filesystem::path(filename);
111 iterator = std::filesystem::directory_iterator({dir_path});
116 size = rc!=-1 ? info.st_size: 0;
117 file.open(filename.c_str(), (std::ios_base::openmode)flags);
127 size_t readBytes(uint8_t *buffer,
size_t length) {
128 return file.readsome((
char *)buffer, length);
130 size_t write(
const uint8_t *buffer,
size_t size)
override {
131 file.write((
const char *)buffer, size);
132 return file.good() ? size : 0;
134 size_t write(uint8_t ch)
override {
136 return file.good() ? 1 : 0;
138 int available()
override {
return size - file.tellg(); };
139 int availableForWrite()
override {
return 1024; }
140 int read()
override {
return file.get(); }
141 int peek()
override {
return file.peek(); }
142 void flush()
override {}
143 void getName(
char *str,
size_t len) { strncpy(str, filename.c_str(), len); }
144 bool isDir() {
return is_dir; }
145 bool isHidden() {
return false; }
150 bool openNext(
SdFile &dir,
int flags = O_RDONLY) {
151 #ifdef USE_FILESYSTEM
152 if (dir.isDir() && dir.iterator != end(dir.iterator)) {
153 std::filesystem::directory_entry entry = *dir.iterator++;
154 return open(entry.path().c_str(), flags);
159 int dirIndex() {
return pos; }
166 std::string filename;
168 std::filesystem::directory_iterator iterator;
169 std::filesystem::path dir_path;