Я делаю небольшую программу следующим образом:Как определить недостаточное дисковое пространство при использовании файлов stdio в 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;
}
Свободное дисковое пространство на моем компьютере составляет около 500 МБ. В main()
, если я вызываю reserve_file_space("C:\\Users\\SysPart\\Desktop\\test.bin", 1 << 28 /*256 MB*/);
, он выдает файл, созданный с точным размером 256 МБ. Однако, если я вызываю reserve_file_space("C:\\Users\\SysPart\\Desktop\\test.bin", 1 << 30 /*1 GB*/);
, он выдает выходной файл размером 0 и не выдает никаких сообщений об ошибке.
Как узнать, достаточно ли свободного места на диске?
Первое, что нужно сделать, это проверить возвращаемое значение 'fseek' и даже' fclose'. – kaylum
@kaylum я сделал. Все они возвратили 0 в двух вызовах. –
@kaylum Проверка возвращаемого значения fclose имеет смысл. Спасибо! –