2016-12-20 1 views
0

Gibt es eine unterstützte API, um freien Speicherplatz in der LocalFileSystem auf einer MBED-Karte zu erhalten? Ich habe versucht statvfs, aber es scheint nicht zu funktionieren ... Irgendwelche Ideen?Abfragen von freiem Speicherplatz in LocalFileSystem auf der MBED-Karte

Ich denke, ich könnte einfach alle Dateien auflisten und die Summe von der Gesamtgröße subtrahieren, aber ich fragte mich, ob es einen besseren Weg gibt. Diese

ist, was ich versucht:

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:

ich alle Dateien iterieren gelandet und Berechnung:

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

Antwort

1

ich, es ist möglich, nicht denken jetzt sofort. Semihosting wird für die LocalFileSystem-API verwendet, und die einzigen derzeit implementierten Befehle sind here. Nichts für freien Speicherplatz ...

+0

Danke Jan, das habe ich vermutet. –

Verwandte Themen