Gibt es eine unterstützte API, um freien Speicherplatz in der LocalFileSystem
auf einer MBED-Karte zu erhalten? Ich habe versucht statvfs
, aber es scheint nicht zu funktionieren ... Irgendwelche Ideen?Abfragen von freiem Speicherplatz in LocalFileSystem auf der MBED-Karte
Ich denke, ich könnte einfach alle Dateien auflisten und die Summe von der Gesamtgröße subtrahieren, aber ich fragte mich, ob es einen besseren Weg gibt. Diese
ist, was ich versucht:
long GetAvailableSpace(const char* path)
{
struct statvfs stat;
if (statvfs(path, &stat) != 0) {
// error happens, just quits here
return -1;
}
// the available size is f_bsize * f_bavail
return stat.f_bsize * stat.f_bavail;
}
UPDATE:
ich alle Dateien iterieren gelandet und Berechnung:
#define MAX_STORAGE 512000
int LocalFileSystemFreeSpace(){
char filename[MAX_FILENAME];
DIR *d;
struct dirent *dir;
int total = 0;
d = opendir("/local");
if(d){
while((dir = readdir(d)) != NULL){
sprintf(filename, "/local/%s", dir->d_name);
int size = FileSize(filename);
total += size;
//printf("%s -> %d\r\n",filename,size);
}
closedir(d);
}
// printf("Total files: %d\r\n", total);
// printf("Free: %d\r\n",MAX_STORAGE-total);
return MAX_STORAGE-total;
}
int FileSize(char * filename){
FILE * fp = fopen(filename,"r");
if(fp==NULL){
return 0;
}
int prev=ftell(fp);
fseek(fp, 0L, SEEK_END);
int sz=ftell(fp);
fclose(fp);
return sz;
}
Danke Jan, das habe ich vermutet. –