171 lines
3.9 KiB
C++
171 lines
3.9 KiB
C++
/*
|
|
* SPIFFS.cpp
|
|
*
|
|
* Created on: Oct 23, 2017
|
|
* Author: vmuser
|
|
*/
|
|
|
|
#include "SPIFFSTest.h"
|
|
|
|
void CSPIFFS::listDir(fs::FS &fs, const char * dirname, uint8_t levels) {
|
|
Serial.printf("Listing directory: %s\n", dirname);
|
|
|
|
File root = fs.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(fs, file.name(), levels - 1);
|
|
}
|
|
} else {
|
|
Serial.print(" FILE: ");
|
|
Serial.print(file.name());
|
|
Serial.print(" SIZE: ");
|
|
Serial.println(file.size());
|
|
}
|
|
file = root.openNextFile();
|
|
}
|
|
}
|
|
|
|
bool CSPIFFS::fileExists(fs::FS &fs, const char * path) {
|
|
File file = fs.open(path);
|
|
if (!(file && !file.isDirectory())) {
|
|
//Serial.println("Failed to open file.");
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
void CSPIFFS::readFile(fs::FS &fs, const char * path) {
|
|
Serial.printf("Reading file: %s\n", path);
|
|
|
|
File file = fs.open(path);
|
|
if (!file) {
|
|
Serial.println("Failed to open file for reading");
|
|
return;
|
|
}
|
|
|
|
Serial.print("Read from file: ");
|
|
while (file.available()) {
|
|
Serial.write(file.read());
|
|
}
|
|
}
|
|
|
|
void CSPIFFS::writeFile(fs::FS &fs, const char * path, String message){
|
|
Serial.printf("Writing file: %s\n", path);
|
|
|
|
File file = fs.open(path, FILE_WRITE);
|
|
if(!file){
|
|
Serial.println("Failed to open file for writing");
|
|
return;
|
|
}
|
|
if(file.print(message)){
|
|
Serial.println("File written");
|
|
} else {
|
|
Serial.println("Write failed");
|
|
}
|
|
}
|
|
|
|
void CSPIFFS::appendFile(fs::FS &fs, const char * path, String message){
|
|
Serial.printf("Appending to file: %s\n", path);
|
|
|
|
File file = fs.open(path, FILE_APPEND);
|
|
if(!file){
|
|
Serial.println("Failed to open file for appending");
|
|
return;
|
|
}
|
|
if(file.print(message)){
|
|
Serial.println("Message appended");
|
|
} else {
|
|
Serial.println("Append failed");
|
|
}
|
|
}
|
|
|
|
void CSPIFFS::renameFile(fs::FS &fs, const char * path1, const char * path2){
|
|
Serial.printf("Renaming file %s to %s\n", path1, path2);
|
|
if (fs.rename(path1, path2)) {
|
|
Serial.println("File renamed");
|
|
} else {
|
|
Serial.println("Rename failed");
|
|
}
|
|
}
|
|
|
|
void CSPIFFS::deleteFile(fs::FS &fs, const char * path){
|
|
Serial.printf("Deleting file: %s\n", path);
|
|
if(fs.remove(path)){
|
|
Serial.println("File deleted");
|
|
} else {
|
|
Serial.println("Delete failed");
|
|
}
|
|
}
|
|
|
|
void CSPIFFS::testFileIO(fs::FS &fs, const char * path){
|
|
File file = fs.open(path);
|
|
static uint8_t buf[512];
|
|
size_t len = 0;
|
|
uint32_t start = millis();
|
|
uint32_t end = start;
|
|
if(file){
|
|
len = file.size();
|
|
size_t flen = len;
|
|
start = millis();
|
|
while(len){
|
|
size_t toRead = len;
|
|
if(toRead > 512){
|
|
toRead = 512;
|
|
}
|
|
file.read(buf, toRead);
|
|
len -= toRead;
|
|
}
|
|
end = millis() - start;
|
|
Serial.printf("%u bytes read for %u ms\n", flen, end);
|
|
file.close();
|
|
} else {
|
|
Serial.println("Failed to open file for reading");
|
|
}
|
|
|
|
|
|
file = fs.open(path, FILE_WRITE);
|
|
if(!file){
|
|
Serial.println("Failed to open file for writing");
|
|
return;
|
|
}
|
|
|
|
size_t i;
|
|
start = millis();
|
|
for(i=0; i<2048; i++){
|
|
file.write(buf, 512);
|
|
}
|
|
end = millis() - start;
|
|
Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end);
|
|
file.close();
|
|
}
|
|
|
|
String CSPIFFS::getFile(fs::FS &fs, const char * path) {
|
|
File file = fs.open(path);
|
|
String output = "";
|
|
|
|
for(int j = 0; j < file.size(); j++) {
|
|
output += (char)file.read();
|
|
}
|
|
|
|
return output;
|
|
}
|
|
|
|
int CSPIFFS::getFileSize(fs::FS &fs, const char * path) {
|
|
File file = fs.open(path);
|
|
return file.size();
|
|
}
|