lorol / LITTLEFS

LittleFS library for arduino-esp32
GNU General Public License v2.0
166 stars 68 forks source link

Cant delete files inside dir #24

Closed pptsk closed 3 years ago

pptsk commented 3 years ago

Hi, I want to use this library but I have problem delete files from specific directory. Can someone help? What I am doing wrong? here is code example:


#include "FS.h"                                                              
#include "LITTLEFS.h"

void setup() {
  Serial.flush();                                                             
  Serial.begin( 115200 );                                                    
  delay(1000);

  LITTLEFS.format();
  if (!LITTLEFS.begin(true)) {                                                
    Serial.println(F("An Error has occurred while mounting LITTLEFS"));       
    return;
  }
  Serial.println( F("LITTLEFS test started... ")) ;                          

  if ( !LITTLEFS.exists("/DIR1" ) ) {
    Serial.println( " dir /DIR1 does not exist! ");
    if ( LITTLEFS.mkdir( "/DIR1" ) ) Serial.println( " dir /DIR1 is created ");
    else Serial.println( " dir /DIR create failed");
  } else {
    Serial.println( " dir /DIR1 allready exist...");
  }
  test( "hello", 5 );

  Serial.println( F("LITTLEFS test end")) ;                         

}

void loop() {

}

void test( String message, int cnt ) {
  for ( int i = 0; i < cnt; i++ ) {
    File f = LITTLEFS.open("/DIR1/file" + String(i) + ".txt", "w+");        
    if ( f ) {                                                                               
      f.print( message );
      f.close();
    }
  }
  listDir( "/", 1 );

  LITTLEFS.rmdir("/DIR1");
  File root = LITTLEFS.open("/DIR1");
  File file;
  while ( file = root.openNextFile() ) {
    file.close();
    if ( !LITTLEFS.remove(file.name()) ) {
      Serial.println( "remove failed" );
    }
  }

  listDir( "/", 1 );
}

void listDir(const char * dirname, int levels ) {
  Serial.printf("Listing directory: %s\r\n", dirname);
  File root = LITTLEFS.open(dirname);
  if (!root) {
    Serial.println("- failed to open directory");
    return;
  }
  if (!root.isDirectory()) {
    Serial.println(" - not a directory");
    return;
  }
  File file = root.openNextFile();
  while (file) {
    if (file.isDirectory()) {
      Serial.print("  DIR : ");
      Serial.println(file.name());
      if (levels) {
        listDir( file.name(), levels - 1);
      }
    } else {
      Serial.print("  FILE: ");
      Serial.print(file.name());
      Serial.print("\tSIZE: ");
      Serial.println(file.size());
    }
    file = root.openNextFile();
  }
}

and here is output, files stay inside directory

LITTLEFS test started... 
 dir /DIR1 does not exist! 
 dir /DIR1 is created 
Listing directory: /
  DIR : /DIR1
Listing directory: /DIR1
  FILE: /DIR1/file0.txt SIZE: 5
  FILE: /DIR1/file1.txt SIZE: 5
  FILE: /DIR1/file2.txt SIZE: 5
  FILE: /DIR1/file3.txt SIZE: 5
  FILE: /DIR1/file4.txt SIZE: 5
remove failed
remove failed
remove failed
remove failed
remove failed
Listing directory: /
  DIR : /DIR1
Listing directory: /DIR1
  FILE: /DIR1/file0.txt SIZE: 5
  FILE: /DIR1/file1.txt SIZE: 5
  FILE: /DIR1/file2.txt SIZE: 5
  FILE: /DIR1/file3.txt SIZE: 5
  FILE: /DIR1/file4.txt SIZE: 5
LITTLEFS test end

Thank you

pptsk commented 3 years ago

Hi, Sorry, I found solution in older post here, and this code works fine:

//-------------------------------------------------------------------------------------------------------------------------
#include "Arduino.h"
#include "FS.h"                                                              
#include "LITTLEFS.h"
//-------------------------------------------------------------------------------------------------------------------------
void setup() {
  Serial.flush();                                                             
  Serial.begin( 115200 );                                                     
  delay(1000);
  //-------------------------------------------------------------------------------------------------------------------------
//  LITTLEFS.format();
  if (!LITTLEFS.begin(true)) {                                                
    Serial.println(F("An Error has occurred while mounting LITTLEFS"));       
    return;
  }
  Serial.println(F("----------------------------------------------------"));  
  Serial.println( F("BOOT finished! ")) ;                                    
  Serial.println( F("LITTLEFS test started... ")) ;                          
  //-----------------------------------------------------------------------------------------------------------------------
  if ( !LITTLEFS.exists("/DIR1" ) ) {
    Serial.println( " dir /DIR1 does not exist! ");
    if ( LITTLEFS.mkdir( "/DIR1" ) ) Serial.println( " dir /DIR1 is created ");
    else Serial.println( " dir /DIR create failed");
  } else {
    Serial.println( " dir /DIR1 allready exist...");
  }
  test( "hello", 5 );
  //-----------------------------------------------------------------------------------------------------------------------
  Serial.println( F("LITTLEFS test end")) ;                          // load last saved configuration
  //-----------------------------------------------------------------------------------------------------------------------
}
//==========================================================================================================================================
void loop() {

}
//==============================================================================
void deltree( const char *path ){
    File dir = LITTLEFS.open( path );   
    if( !dir.isDirectory() ){
       dir.close();
       LITTLEFS.remove( path );
       return;
    }  
    File entry;      
    while ( entry = dir.openNextFile() ){               
      if ( entry.isDirectory() ){
         deltree( entry.name() );        
      } else{ 
         char* tmpname = strdup( entry.name() );
         entry.close();
         LITTLEFS.remove( tmpname );
         free( tmpname );
      }         
    }
    dir.close(); 
    LITTLEFS.rmdir( path );     
}
//==============================================================================
void test( String message, int cnt ) {
  Serial.println( "status before test" );
  listDir( "/", 1 );
  for ( int i = 0; i < cnt; i++ ) {
    File f = LITTLEFS.open("/DIR1/file" + String(i) + ".txt", "w+");        // open-create file and set received data inside
    if ( f ) {                                                                                // file sucessfuly opened
      f.print( message );
      f.close();
    }
  }
  //----------------------------------------
  Serial.println( "status after create" );
  listDir( "/", 1 );
  deltree( "/DIR1" );
  //----------------------------------------
  Serial.println( "status after delete" );
  listDir( "/", 1 );
}
//==============================================================================
void listDir(const char * dirname, int levels ) {
  Serial.printf("Listing directory: %s\r\n", dirname);
  File root = LITTLEFS.open(dirname);
  if (!root) {
    Serial.println("- failed to open directory");
    return;
  }
  if (!root.isDirectory()) {
    Serial.println(" - not a directory");
    return;
  }
  File file = root.openNextFile();
  while (file) {
    if (file.isDirectory()) {
      Serial.print("  DIR : ");
      Serial.println(file.name());
      if (levels) {
        listDir( file.name(), levels - 1);
      }
    } else {
      Serial.print("  FILE: ");
      Serial.print(file.name());
      Serial.print("\tSIZE: ");
      Serial.println(file.size());
    }
    file = root.openNextFile();
  }
}

result is here:

BOOT finished! 
LITTLEFS test started... 
 dir /DIR1 does not exist! 
 dir /DIR1 is created 
status before test
Listing directory: /
  DIR : /DIR1
Listing directory: /DIR1
status after create
Listing directory: /
  DIR : /DIR1
Listing directory: /DIR1
  FILE: /DIR1/file0.txt SIZE: 5
  FILE: /DIR1/file1.txt SIZE: 5
  FILE: /DIR1/file2.txt SIZE: 5
  FILE: /DIR1/file3.txt SIZE: 5
  FILE: /DIR1/file4.txt SIZE: 5
status after delete
Listing directory: /
LITTLEFS test end

Thank you