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.