Как создать файл размера "х"? - PullRequest
9 голосов
/ 15 октября 2011

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

Ответы [ 5 ]

13 голосов
/ 15 октября 2011

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

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

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

10 голосов
/ 16 января 2014

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

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

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

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

5 голосов
/ 15 октября 2011

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

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

2 голосов
/ 15 октября 2011

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

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

Для создания нового файла - я не уверен, что именно вы спросите. Хотите создать файл, который пуст, но имеет определенный размер? Зачем вам это нужно? Метод разреженного файла, который описали другие (fseek + fputc), создает «разреженный» файл, который почти не занимает места на диске, но (если вы его читаете) возвращает все 0.

1 голос
/ 15 октября 2011

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

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

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

Однако этот подход позволяет только увеличить размер файла. Это не позволяет вам сжать его.

2. (Windows)

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

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

3. (Linux)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...