查询MBED板上LocalFileSystem中的可用空间

时间:2016-12-20 05:05:16

标签: lpc mbed

是否有任何支持的API可以在MBED主板上的LocalFileSystem中获得可用空间?我已经尝试了statvfs,但它似乎不起作用......有什么想法吗?

我想我可以简单地列出所有文件并从总大小中减去总数,但我想知道是否有更好的方法。

这就是我的尝试:

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

更新

我最终遍历所有文件并计算它:

#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 个答案:

答案 0 :(得分:1)

我现在不认为它是可能的。 Semihosting用于LocalFileSystem API,当前实现的唯一命令是here。没有可用的磁盘空间...