2012-04-18 12 views
6

Ho bisogno di un generatore di file casuale che generi un file veramente casuale, non comprimibile fittizio.Generatore di file casuali (di nuovo!)

Ho finito con questo codice delphi. Si funziona, ma è dolorosamente sloooow

var 
    Buf  : Integer; 
    TheFile : TFileStream; 
begin 
     TheFile := TFileStream.Create(FileName, fmCreate OR fmOpenReadWrite); 
     with TheFile do 
     begin 
      for i := 0 to FileSize do // Iterate 
      begin 
       Buf := Random(999999) * i; 
       WriteBuffer(Buf, SizeOf(Buf)); 
      end; // for 
     end; // with 
end, 

La mia domanda è: C'è un digiuno generatore di file casuale che posso usare? sia il codice e/o riga di comando strumenti Delphi sono accettabili, purché:

  1. posso eseguirlo su Windows senza intervento manuale (Ho bisogno di questo per i miei test, nessun intervento è consentito)
  2. E 'veloce
  3. file generati è non comprimibile (es. comprimendo i risultati file generati in alcun risparmio di spazio)

EDIT Per chi fosse interessato, ho applicato il consiglio che ho ricevuto qui e made this function, è abbastanza veloce & 7zip ha difficoltà a comprimere i dati generati.

+0

Indica il tuo codice e scopri dove trascorre più tempo. – japreiss

+0

Probabilmente sta meglio usando CryptoAPI che riempie un buffer che viene usato per scrivere sul file. C'è un codice C - http://msdn.microsoft.com/en-us/library/aa382048.aspx che è un buon punto di partenza – Petesh

+0

Che tipo è Buf? Che tipo sono io? La terminazione dovrebbe essere "FileSize-1"? –

risposta

9

Utilizzare un buffer di dimensioni di pagina o dimensione di pagina a 4096 byte. Scrivere un numero intero alla volta sarà lento.

+0

D'accordo. Il problema qui è I/O. –

+5

@ChrisThornton In effetti non sarà l'I/O a essere il collo di bottiglia, ma l'overhead di chiamare 'WriteFile'. Il sistema operativo avrà un livello di buffering. –

1

È possibile utilizzare il mio script generate_random_file.py (Python 3) che ho utilizzato per generare dati di test in un mio progetto.

  • Funziona su Linux e Windows.
  • È molto veloce, perché utilizza os.urandom() per generare i dati casuali in blocchi di 256 KiB invece di generare e scrivere separatamente ciascun byte.
+0

@Will: come osi chiamare questo spam? Sì, ho postato questa risposta in 3 domande correlate, ma questo è generalmente considerato accettabile (http://meta.stackexchange.com/questions/17455/is-it-ok-that-i-just-posted-my -Stesso-risposta-a-molti-correlati-domande). Se vuoi che io migliori la mia risposta, allora dimmi perché. Semplicemente cancellarlo è una cattiva pratica. – robert