Как создать файл размера "x"?

Как установить размер файла в c ? Сделаю ли я это после того, как раскроюсь?

5 ответов


Да, вы сделаете это после fopen-вы можете создать то, что известно как разреженный файл

#include <stdio.h>
int main(void) {
        int X = 1024 * 1024 - 1;
        FILE *fp = fopen("myfile", "w");
        fseek(fp, X , SEEK_SET);
        fputc('', fp);
        fclose(fp);
}

Это должно создать вам файл для X байта для всего, что вам нужно, в этом случае это 1MB


удивлен, что никто еще не сказал этого - но простой ответ ftruncate, который можно использовать для увеличения длины файла, а также для его уменьшения. При увеличении дополнительного файла данные устанавливаются в ноль байт.

FILE *fp=fopen("myfile", "w");
ftruncate(fileno(fp), 1024*1024);
fclose(fp);

обратите внимание, что если вы ранее записали данные за пределами длины, которую вы усекаете, вам сначала нужно fflush (см. здесь: ftruncate в файле, открытом с помощью fopen).

ftruncate информация: http://linux.die.net/man/2/ftruncate.


только в обычный стандартный C написать x байт в файл после его открытия в бинарном режиме, и даже тогда стандарт позволяет реализации добавлять произвольное количество нулевых байтов до конца, не сообщая вам.

С другой стороны, с POSIX, это легко. Просто позвоните ftruncate(fileno(f), x);


можете ли вы уточнить свой вопрос? Вы имеете в виду, что вы пытаетесь создать новый файл с определенным размером или у вас уже есть файл и вы хотите, чтобы обрезать его?

усечение существующего файла легко (в вариантах Unix, во всяком случае) -- используйте функцию truncate ().

для создания нового файла-я не уверен, что именно вы спросите. Вы хотите создать файл, который пуст, но имеет определенный размер? Зачем тебе это нужно? Разреженный файл техника, описанная другими (fseek + fputc), создает "разреженный" файл, который почти не занимает места на диске, но (если вы его читаете) возвращает все 0.


существует множество способов сделать это:

1 . Только C / C++

вы можете переместить указатель файла (используя fseek()) к размеру, который вы хотите, и напишите что-нибудь. Это установит размер файла в положение указателя файла.

однако, этот подход позволяет только увеличивать размер файла. Она не позволяет тебе ее уменьшить.

2 . (Windows)

вы можете сделать файл с помощью CreateFile(), затем установите местоположение указателя файла и использовать SetEndOfFile() установить фактический размер.

этот метод в Windows также может использоваться для сокращения размера файла.

3 . (Linux)

Я не уверен здесь, но, вероятно, в posix есть что-то, что сделает это, кроме просто fseek + fwrite.