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

我需要测试一些与文件大小有关的加载问题。我有一个用 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)) {


}
}
99095 次浏览

关于如何做到这一点,有很多不同的方法。一种是,用一堆字符填充文件。你需要100KB 吗?没问题。.100 * 1024 * 8 = 819200位。一个字符是16位。819200/16 = 51200.你需要把51200个字符放进一个文件里。但是考虑到一个文件可能有额外的头/元数据,因此您可能需要考虑到这一点,并减少写入文件的字符数。

最简单的方法是遵循代码:

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 每个字符使用两个字节。

你总是可以为字符串使用一个构造函数,它接受一个 char并且多次重复这个字符:

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

这会给你一个5000颗星的字符串-根据你的需要进行调整。

作为对你问题的部分回答,我最近创建了一个便携式 WPF 应用程序,它可以轻松地创建几乎任何大小的“垃圾”文件: https://github.com/webmooch/FileCreator