Ich mache ein kleines Programm wie folgt:Wie erkennen Sie nicht genügend Speicherplatz bei der Verwendung von STDIO-Dateioperationen in C/C++?
void reserve_file_space(char* file_path, size_t amount)
{
FILE* fp = fopen(file_path, "w+b");
if(!fp)
{
printf("could not create a new file\n");
return;
}
int fseek_ret = fseek(fp, amount, SEEK_SET);
if(fseek_ret != 0)
{
printf("could not seek to the desired position\n");
fclose(fp);
return;
}
char garbage = 1;
size_t ret = fwrite(&garbage, 1, 1, fp);
if(ret != 1)
{
printf("could not write the garbage character\n");
}
fclose(fp);
}
int main(int argc, char* argv[])
{
reserve_file_space("C:\\Users\\SysPart\\Desktop\\test.bin", 1 << 30);
return 0;
}
Der freie Speicherplatz auf meinem PC ist etwa 500 MBs. In der main()
, wenn ich reserve_file_space("C:\\Users\\SysPart\\Desktop\\test.bin", 1 << 28 /*256 MB*/);
aufruft gibt es eine Datei mit der genauen Größe von 256 MB erstellt. Wenn ich jedoch reserve_file_space("C:\\Users\\SysPart\\Desktop\\test.bin", 1 << 30 /*1 GB*/);
aufrufe, erzeugt es die Ausgabedatei mit der Größe 0 und ohne einen Fehlerhinweis auszudrucken.
Wie kann ich herausfinden, ob der Speicherplatz ausreichend ist, um korrekt zu funktionieren?
Das erste, was zu tun wäre, würde den Rückgabewert von 'fseek' und sogar' fclose' überprüfen. – kaylum
@ Kaylum Ich habe. Sie alle haben 0 in den zwei Aufrufen zurückgegeben. –
@ kaylum Das Überprüfen des Rückgabewertes von fclose ist sinnvoll. Vielen Dank! –