maneira mais rápida de criar grande arquivo em C ++?
-
06-07-2019 - |
Pergunta
Crie um arquivo de texto simples em c ++ em torno de 50 - 100 MB com o conteúdo 'Adicionado primeira linha' deve ser inserida no arquivo para 4 milhões de vezes
Solução
usando o arquivo de estilo antigo io
fopen o arquivo para escrita.
fseek para o tamanho do arquivo desejado -. 1
fwrite um único byte
fclose o arquivo
Outras dicas
A maneira mais rápida de criar um arquivo de um determinado tamanho é simplesmente criar um arquivo de comprimento zero usando creat()
ou open()
e, em seguida, alterar o tamanho usando chsize()
. Isso vai simplesmente alocar blocos no disco para o arquivo, o conteúdo será o que passou a ser naqueles blocos. É muito rápido uma vez que nenhum tampão escrevendo necessidades a ter lugar.
Não tenho certeza eu entendo a pergunta. Você quer garantir que cada caractere no arquivo é um personagem em ASCII? Se assim for, o que sobre isso? Preenche o arquivo com "abcdefghabc ...."
#include <stdio.h>
int main ()
{
const int FILE_SiZE = 50000; //size in KB
const int BUFFER_SIZE = 1024;
char buffer [BUFFER_SIZE + 1];
int i;
for(i = 0; i < BUFFER_SIZE; i++)
buffer[i] = (char)(i%8 + 'a');
buffer[BUFFER_SIZE] = '\0';
FILE *pFile = fopen ("somefile.txt", "w");
for (i = 0; i < FILE_SIZE; i++)
fprintf(pFile, buffer);
fclose(pFile);
return 0;
}
Você não mencionou o OS, mas eu vou assumir creat / abrir / fechar / gravação estão disponíveis.
Para a escrita verdadeiramente eficiente e assumindo, por exemplo, uma página e bloco de disco tamanho 4k e uma seqüência repetida:
- abrir o arquivo.
- alocar 4k número * de caracteres na cadeia repetido, de preferência alinhado com um limite de página.
- imprimir seqüência repetida na memória 4k vezes, enchendo os blocos com precisão.
- Use write () para escrever os blocos no disco tantas vezes quanto necessário. Você pode querer escrever uma peça parcial para o último bloco para obter o tamanho para sair direito.
- Feche o arquivo.
Isso ignora o buffer de fopen () e amigos, o que é bom e ruim: seus meios de tamponamento que eles são agradáveis ??e rápido, mas eles ainda não vão ser tão eficiente quanto este, que não tem sobrecarga de trabalho com o tampão.
Isso pode facilmente ser escrito em C ++ ou C, mas não assuma que você vai usar POSIX chama ao invés de iostream ou stdio por causa da eficiência, por isso é fora da especificação biblioteca central.
A maneira mais rápida para criar grande arquivo em C ++? Está bem. Presumo maneira mais rápida significa aquele que leva o tempo de execução menor.
Crie um arquivo de texto simples em c ++ em torno de 50 -. 100 MB com o conteúdo 'Adicionado primeira linha' deve ser inserida no arquivo para 4 milhões de vezes
preallocate o arquivo usando o arquivo de estilo antigo io
fopen the file for write.
fseek to the desired file size - 1.
fwrite a single byte
fclose the file
create a string containing the "Added first line\n" a thousand times.
find it's length.
preallocate o arquivo usando o arquivo de estilo antigo io
fopen the file for write.
fseek to the the string length * 4000
fwrite a single byte
fclose the file
open the file for read/write
loop 4000 times,
writing the string to the file.
close the file.
Esse é o meu melhor palpite. Eu tenho certeza que existem muitas maneiras de fazê-lo.