Как сгенерировать строку определенной длины для вставки в файл для соответствия критериям размера файла?

У меня есть требование проверить некоторые проблемы с загрузкой в ​​отношении размера файла. У меня есть приложение Windows, написанное на С#, которое будет автоматически генерировать файлы. Я знаю размер каждого файла, например. 100 КБ, и сколько файлов для генерации. Мне нужна помощь в том, как создать строку, которая меньше или равна требуемому размеру файла.

псевдокод:

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

Вы всегда можете использовать конструктор для строки, которая принимает char и несколько раз, когда вы хотите, чтобы этот символ повторялся:

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

Это дает вам строку из 5000 звезд - подстраивайте под свои нужды.

Ответ 2

Самый простой способ - следующий код:

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 использует два байта на символ, если я правильно помню.

Ответ 3

Есть так много вариантов, как вы можете это сделать. Один из них, заполнить файл кучей символов. Вам нужно 100 КБ? Нет проблем.. 100 * 1024 * 8 = 819200 бит. Единственный char - 16 бит. 819200/16 = 51200. Вам нужно вставить 51 200 символов в файл. Но учтите, что файл может иметь дополнительные данные заголовка/метаданных, поэтому вам может потребоваться учесть это и уменьшить количество символов для записи в файл.

Ответ 4

В качестве частичного ответа на ваш вопрос я недавно создал переносное приложение WPF, которое легко создает "мусорные" файлы практически любого размера: https://github.com/webmooch/FileCreator