2016-12-20 6 views
0

Есть ли поддерживаемый 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; 
} 

ответ

1

Я не думаю, что это возможно прямо сейчас. Semihosting используется для API LocalFileSystem, и единственные команды, которые в настоящее время реализованы, - here. Ничего свободного места на диске ...

+0

Спасибо, Ян, вот что я подозревал. –