Come generare una stringa di una certa lunghezza da inserire in un file per soddisfare i criteri di dimensione del file?


114

Ho l'obbligo di testare alcuni problemi di caricamento per quanto riguarda la dimensione del file. Ho un'applicazione Windows scritta in C # che genererà automaticamente i file. Conosco la dimensione di ogni file, es. 100 KB e quanti file generare. Ciò di cui ho bisogno è come generare una stringa inferiore o uguale alla dimensione del file richiesta.

pseudo codice:

long fileSizeInKB = (1024 * 100); //100KB
int numberOfFiles = 5;

for(var i = 0; i < numberOfFiles - 1; i++) {
     var dataSize = fileSizeInKB;
     var buffer = new byte[dataSize];
     using (var fs = new FileStream(File, FileMode.Create, FileAccess.Write)) {

     }
}

1
Perché hai bisogno di creare una stringa? Basta scrivere il tuo buffer.
Lazarus

Diciamo che voglio estenderlo per generare file di testo Lorem Ipsum piuttosto che solo "fs.Write (buffer, 0, (int) fileSizeInKB)".
VajNyiaj

Risposte:


346

Puoi sempre usare il costruttore a per string che richiede un chare un numero di volte in cui vuoi che quel carattere venga ripetuto:

string myString = new string('*', 5000);

Questo ti dà una serie di 5000 stelle - adatta alle tue esigenze.


83
+1 Cosa facevano i nostri antenati prima di Stack Overflow? Così semplice, così dolce.
Dan Solovay

6
Stack overflow è letteralmente la top ten dei risultati tecnologici di tutti i tempi :-D come diavolo qualcuno ha imparato a programmare in modo efficiente senza di esso, non lo sapremo mai
Ben Akin

2
Ero lì, in questi tempi antichi e non mi sento ancora un antenato: D L'unico modo per trovare tali perle era cercare attraverso il tuo codice e / o codice della tua squadra e accumulare cose buone nel tempo. Ora possiamo condividere le perle con tutti :)
Andrzej Martyna

13

Il modo più semplice sarebbe seguire il codice:

var content = new string('A', fileSizeInKB);

Ora hai una stringa con il numero di LA richiesto.

Per riempirlo con Lorem Ipsum o qualche altra stringa ripetuta, crea qualcosa di simile al seguente pseudocodice:

string contentString = "Lorem Ipsum...";
for (int i = 0; i < fileSizeInKB / contentString.Length; i++)
  //write contentString to file

if (fileSizeInKB % contentString.Length > 0)
  // write remaining substring of contentString to file

Modifica: se stai salvando in Unicode potresti dover dimezzare il conteggio delle dimensioni del file perché Unicode utilizza due byte per carattere se ricordo correttamente.


4
fileSizeInKB dovrebbe essere fileSizeInBytes .. o fileSizeInBytes / 2 se stai emettendo unicode?
James Gaunt

1
Sì, ho usato il nome della variabile del campione, il valore assegnato è byte, quindi o il nome è sbagliato o il valore assegnato.
Florian von Spiczak

2

Ci sono così tante varianti su come puoi farlo. Uno potrebbe essere, riempire il file con un mucchio di caratteri. Hai bisogno di 100 KB? Nessun problema. 100 * 1024 * 8 = 819200 bit. Un singolo carattere è di 16 bit. 819200/16 = 51200. Devi inserire 51.200 caratteri in un file. Ma considera che un file può avere intestazioni / metadati aggiuntivi, quindi potrebbe essere necessario tenerne conto e diminuire il numero di caratteri da scrivere sul file.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.