web-dev-qa-db-fra.com

Comment générer une chaîne d'une certaine longueur à insérer dans un fichier pour répondre à un critère de taille?

J'ai l'obligation de tester certains problèmes de charge en ce qui concerne la taille du fichier. J'ai une application Windows écrite en C # qui générera automatiquement les fichiers. Je connais la taille de chaque fichier, ex. 100 Ko, et combien de fichiers à générer. Ce dont j'ai besoin d'aide, c'est comment générer une chaîne inférieure ou égale à la taille de fichier requise.

pseudo code:

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)) {

     }
}
86
VajNyiaj

Vous pouvez toujours utiliser le constructeur a pour une chaîne qui prend une char et un nombre de fois où vous voulez que ce caractère soit répété:

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

Cela vous donne une chaîne de 5000 étoiles - Tweak à vos besoins.

255
marc_s

Le moyen le plus simple serait le code suivant:

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

Maintenant, vous avez une chaîne avec autant de A que nécessaire.

Pour le remplir avec Lorem Ipsum ou une autre chaîne répétée, construisez quelque chose comme le pseudocode suivant:

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

Edition: Si vous enregistrez en Unicode, vous devrez peut-être réduire de moitié le nombre de fichiers, car Unicode utilise deux octets par caractère, si je me souviens bien.

11
Florian von Spiczak

Il y a tellement de variations sur la façon de procéder. On pourrait être, remplissez le fichier avec un tas de caractères. Vous avez besoin de 100 Ko? Pas de problème .. 100 * 1024 * 8 = 819200 bits. Un seul caractère est 16 bits. 819200/16 = 51200. Vous devez coller 51 200 caractères dans un fichier. Mais considérez qu'un fichier peut avoir des en-têtes/métadonnées supplémentaires, vous devrez peut-être en tenir compte et réduire le nombre de caractères à écrire dans le fichier.

1
Kon

En réponse partielle à votre question, j'ai récemment créé une application portable WPF qui crée facilement des fichiers «indésirables» de presque toutes les tailles: https://github.com/webmooch/FileCreator

0
Bosco