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

Foi útil?

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:

  1. abrir o arquivo.
  2. alocar 4k número * de caracteres na cadeia repetido, de preferência alinhado com um limite de página.
  3. imprimir seqüência repetida na memória 4k vezes, enchendo os blocos com precisão.
  4. 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.
  5. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top