Domanda

Crea un file di testo semplice in c ++ tra 50 e 100 MB con il contenuto 'Prima riga aggiunta' dovrebbe essere inserito nel file per 4 milioni di volte

È stato utile?

Soluzione

usando il vecchio file io

fopen il file per la scrittura.

fseek alla dimensione del file desiderata - 1.

riscrivi un singolo byte

Chiudi il file

Altri suggerimenti

Il modo più veloce per creare un file di una certa dimensione è semplicemente creare un file di lunghezza zero usando creat () o open () e quindi cambiare la dimensione usando chsize () . Questo semplicemente assegnerà blocchi sul disco per il file, il contenuto sarà quello che è successo in quei blocchi. È molto veloce poiché non è necessario eseguire la scrittura del buffer.

Non sono sicuro di aver capito la domanda. Vuoi assicurarti che ogni carattere nel file sia un carattere ASCII stampabile? Se è così, che dire di questo? Riempie il file con " 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;
}

Non hai menzionato il sistema operativo, ma suppongo che creat / open / close / write siano disponibili.

Per una scrittura e un'assunzione veramente efficienti, diciamo, una pagina di 4k e dimensioni del blocco del disco e una stringa ripetuta:

  1. apri il file.
  2. alloca 4k * numero di caratteri nella tua stringa ripetuta, idealmente allineata a un limite di pagina.
  3. stampa 4 volte la stringa ripetuta nella memoria, riempiendo i blocchi con precisione.
  4. Usa write () per scrivere i blocchi su disco tutte le volte che è necessario. Potresti voler scrivere un pezzo parziale per l'ultimo blocco per ottenere la dimensione corretta.
  5. chiudi il file.

Questo evita il buffering di fopen () e degli amici, il che è positivo e negativo: il loro buffering significa che sono simpatici e veloci, ma non saranno ancora efficienti come questo, che non ha alcun sovraccarico di lavoro con il buffer.

Questo può essere facilmente scritto in C ++ o C, ma presuppone che userete le chiamate POSIX anziché iostream o stdio per motivi di efficienza, quindi è al di fuori delle specifiche della libreria principale.

Il modo più veloce per creare file di grandi dimensioni in c ++? Ok. Presumo che il modo più veloce significhi quello che richiede il minor tempo di esecuzione.

Crea un file di testo semplice in c ++ tra 50 e 100 MB con il contenuto "Aggiunta prima riga" da inserire nel file per 4 milioni di volte.

preallocate il file usando il vecchio file 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 il file usando il vecchio file 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.

Questa è la mia ipotesi migliore. Sono sicuro che ci sono molti modi per farlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top