2016-12-20 2 views
0

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; 
} 

Répondre

1

Je ne pense pas qu'il soit possible maintenant. Semihosting est utilisé pour l'API LocalFileSystem et les seules commandes actuellement implémentées sont here. Rien pour l'espace disque libre ...

+0

Merci Jan, c'est ce que je soupçonnais. –