如何生成一定长度的字符串以插入文件中以满足文件大小标准?


114

我需要测试一些有关文件大小的负载问题。我有一个用C#编写的Windows应用程序,它将自动生成文件。我知道每个文件的大小,例如。100KB,以及要生成多少个文件。我需要帮助的是如何生成小于或等于所需文件大小的字符串。

伪代码:

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
为什么需要创建一个字符串?只需编写缓冲区即可。
Lazarus

假设,我想扩展它以生成Lorem Ipsum文本文件,而不仅仅是“ fs.Write(buffer,0,(int)fileSizeInKB)”。
VajNyiaj 2011年

Answers:


344

您始终可以对字符串使用构造函数,该构造函数需要char重复多次,并希望重复该字符:

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

这将为您提供一串5000颗星星-根据您的需要进行调整。


83
+1在堆栈溢出之前,我们的祖先做了什么?如此简单,如此甜蜜。
Dan Solovay 2013年

6
堆栈溢出实际上是有史以来十大技术成就:-D没人能学会如何有效地编写代码,我们永远不会知道
Ben Akin

2
在那个古老的时代,我曾经在那儿,但我还不觉得自己是祖先:现在我们可以与大家分享珍珠:)
安德烈·马蒂娜

13

最简单的方法是以下代码:

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

现在,您已经有了一个字符串,其中包含所需的A。

要用Lorem Ipsum或其他一些重复的字符串填充它,请构建以下伪代码:

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

编辑:如果您要保存为Unicode,则可能需要减少文件大小的一半,因为如果我没记错的话,Unicode每个字符使用两个字节。


4
如果要输出unicode,fileSizeInKB应该是fileSizeInBytes ..或fileSizeInBytes / 2?
James Gaunt

1
是的,我使用了样本的变量名,分配的值是字节,因此名称错误或分配的值。
Florian von Spiczak 2011年

2

如何执行此操作有很多变体。一种可能是,用一堆字符填充文件。您需要100KB?没问题。100 * 1024 * 8 = 819200位。单个字符为16位。819200/16 =51200。您需要将51200个字符放入文件中。但是请考虑一个文件可能具有其他标头/元数据,因此您可能需要解决这个问题并减少写入文件的字符数。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.