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 (" /" 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