Есть ли поддерживаемый API, чтобы получить свободное пространство в LocalFileSystem
на плате MBED? Я пробовал statvfs
, но он, похоже, не работает ... Любые идеи?Запрос свободного места в LocalFileSystem на плате MBED
Я думаю, я мог бы просто перечислить все файлы и вычесть общее из общего размера, но мне было интересно, есть ли лучший способ.
Это то, что я пробовал:
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:
Я в конечном итоге перебирает все файлы и вычисления его:
#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;
}
Спасибо, Ян, вот что я подозревал. –