Я знаю, что ваш вопрос помечен как Windows, и Брайан Р. Бонди дал вам лучший ответ на ваш вопрос, если вы точно знаете, что вам не придется переносить свое приложение на другие платформы. Однако, если вам, возможно, придется перенести свое приложение на другие платформы, вы можете сделать что-то более похожее на то, что предложил Адриан Корниш в качестве ответа на вопрос «Как создать файл размера «x»?» можно найти по адресу Как создать файл размера x?.
FILE *fp=fopen("myfile", "w");
fseek(fp, 1024*1024, SEEK_SET);
fputc('\n', fp);
fclose(fp);
Конечно, есть дополнительная изюминка. В ответе, предложенном Адрианом Корнишем, используется функция fseek со следующей подписью.
int fseek ( FILE * stream, long int offset, int origin );
Проблема в том, что вы хотите создать очень большой файл, размер которого выходит за пределы диапазона 32-битного целого числа. Вам нужно использовать 64-битный эквивалент fseek. К сожалению, на разных платформах он имеет разные названия.
Заголовочный файл LargeFileSupport.h находится по адресу http://mosaik-aligner.googlecode.com/svn-history/r2/trunk/src/CommonSource/Utilities/LargeFileSupport.h предлагает решение этой проблемы.
Это позволит вам написать следующую функцию.
#include "LargeFileSupport.h"
/* Include other headers. */
bool createLargeFile(const char * filename, off_type size)
{
FILE *fp = fopen(filename, "w");
if (!fp)
{
return false;
}
fseek64(fp, size, SEEK_SET);
fputc('\n', fp);
fclose(fp);
}
Я подумал, что добавлю это на всякий случай, если информация будет вам полезна.
person
Ben Key
schedule
04.08.2014