Как создать файл размера "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
.