File tree Expand file tree Collapse file tree 5 files changed +57
-0
lines changed Expand file tree Collapse file tree 5 files changed +57
-0
lines changed Original file line number Diff line number Diff line change @@ -187,6 +187,22 @@ File File::openNextFile(const char* mode)
187187 return _p->openNextFile (mode);
188188}
189189
190+ boolean File::seekDir (long position){
191+ if (!_p){
192+ return false ;
193+ }
194+ return _p->seekDir (position);
195+ }
196+
197+ boolean File::getNextFileName (String &filename)
198+ {
199+ if (!_p) {
200+ return NULL ;
201+ }
202+ return _p->getNextFileName (filename);
203+
204+ }
205+
190206void File::rewindDirectory (void )
191207{
192208 if (!*this ) {
Original file line number Diff line number Diff line change @@ -78,7 +78,9 @@ class File : public Stream
7878 const char * name () const ;
7979
8080 boolean isDirectory (void );
81+ boolean seekDir (long position);
8182 File openNextFile (const char * mode = FILE_READ);
83+ boolean getNextFileName (String &filename);
8284 void rewindDirectory (void );
8385
8486protected:
Original file line number Diff line number Diff line change @@ -43,6 +43,8 @@ class FileImpl
4343 virtual const char * name () const = 0;
4444 virtual boolean isDirectory (void ) = 0;
4545 virtual FileImplPtr openNextFile (const char * mode) = 0;
46+ virtual boolean seekDir (long position);
47+ virtual boolean getNextFileName (String &filename);
4648 virtual void rewindDirectory (void ) = 0;
4749 virtual operator bool () = 0;
4850};
Original file line number Diff line number Diff line change @@ -476,6 +476,41 @@ FileImplPtr VFSFileImpl::openNextFile(const char* mode)
476476 return std::make_shared<VFSFileImpl>(_fs, name.c_str (), mode);
477477}
478478
479+ boolean VFSFileImpl::seekDir (long position){
480+ if (!_d){
481+ return false ;
482+ }
483+ seekdir (_d, position);
484+ return true ;
485+ }
486+
487+
488+ boolean VFSFileImpl::getNextFileName (String &filename)
489+ {
490+ if (!_isDirectory || !_d) {
491+ return false ;
492+ }
493+ struct dirent *file = readdir (_d);
494+ if (file == NULL ) {
495+ return false ;
496+ }
497+ if (file->d_type != DT_REG && file->d_type != DT_DIR) {
498+ return false ;
499+ }
500+ String fname = String (file->d_name );
501+ String name = String (_path);
502+ if (!fname.startsWith (" /" ) && !name.endsWith (" /" )) {
503+ name += " /" ;
504+ }
505+ name += fname;
506+ if (name.length () > 0 ) {
507+ filename = name;
508+ return true ;
509+ } else {
510+ return false ;
511+ }
512+ }
513+
479514void VFSFileImpl::rewindDirectory (void )
480515{
481516 if (!_isDirectory || !_d) {
Original file line number Diff line number Diff line change @@ -71,6 +71,8 @@ class VFSFileImpl : public FileImpl
7171 const char * name () const override ;
7272 time_t getLastWrite () override ;
7373 boolean isDirectory (void ) override ;
74+ boolean seekDir (long position) override ;
75+ boolean getNextFileName (String &filename) override ;
7476 FileImplPtr openNextFile (const char * mode) override ;
7577 void rewindDirectory (void ) override ;
7678 operator bool ();
You can’t perform that action at this time.
0 commit comments