125 votes

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

J'ai besoin 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. J'ai besoin d'aide pour savoir 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)) {

     }
}

383voto

marc_s Points 321990

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

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

Cela vous donne une chaîne de 5000 étoiles - ajustez selon vos besoins.

13voto

Le moyen le plus simple serait de suivre le code :

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

Vous avez maintenant une chaîne avec autant de A que nécessaire.

Pour le remplir avec Lorem Ipsum ou une autre chaîne répétitive, créez 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

Modifier : si vous enregistrez en Unicode, vous devrez peut-être réduire de moitié la taille du fichier, car Unicode utilise deux octets par caractère si je me souviens bien.

2voto

Kon Points 16125

Il y a tellement de variantes sur la façon dont vous pouvez le faire. L'une serait de remplir 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 de 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 donc peut-être en tenir compte et réduire le nombre de caractères à écrire dans le fichier.

0voto

Bosco Points 243

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X