Y a-t-il une API prise en charge pour obtenir de l'espace libre dans le LocalFileSystem
sur une carte MBED? J'ai essayé statvfs
mais ça ne semble pas fonctionner ... Des idées? Je suppose que je pourrais simplement lister tous les fichiers et soustraire le total de la taille totale, mais je me demandais s'il y avait une meilleure façon.Demande d'espace libre dans LocalFileSystem sur la carte MBED
C'est ce que j'ai essayé:
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;
}
MISE À JOUR:
J'ai fini par itérer sur tous les fichiers et le calculer:
#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;
}
Merci Jan, c'est ce que je soupçonnais. –