Bagaimana cara menghasilkan string dengan panjang tertentu untuk dimasukkan ke dalam file untuk memenuhi kriteria ukuran file?

114

Saya memiliki persyaratan untuk menguji beberapa masalah pemuatan berkaitan dengan ukuran file. Saya memiliki aplikasi windows yang ditulis dalam C # yang secara otomatis akan menghasilkan file. Saya tahu ukuran setiap file, mis. 100 KB, dan berapa banyak file yang akan dibuat. Yang saya perlukan bantuan adalah bagaimana menghasilkan string yang kurang dari atau sama dengan ukuran file yang dibutuhkan.

kode semu:

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

     }
}
VajNyiaj
sumber
1
Mengapa Anda perlu membuat string? Tulis saja buffer Anda.
Lazarus
Katakanlah, saya ingin memperluasnya untuk menghasilkan file teks Lorem Ipsum daripada hanya "fs.Write (buffer, 0, (int) fileSizeInKB)".
VajNyiaj

Jawaban:

346

Anda selalu dapat menggunakan konstruktor untuk string yang membutuhkan a chardan berapa kali Anda ingin karakter tersebut berulang:

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

Ini memberi Anda rangkaian 5.000 bintang - sesuaikan dengan kebutuhan Anda.

marc_s
sumber
83
+1 Apa yang dilakukan nenek moyang kita sebelum Stack Overflow? Sangat sederhana, sangat manis.
Dan Solovay
6
Stack overflow secara harfiah adalah sepuluh pencapaian teknologi teratas sepanjang masa :-D bagaimana orang bisa belajar membuat kode secara efisien tanpanya, kita tidak akan pernah tahu
Ben Akin
2
Saya ada di sana, di zaman kuno ini dan saya belum merasa seperti leluhur: D Satu-satunya cara untuk menemukan mutiara semacam itu adalah dengan menelusuri kode Anda dan / atau kode tim Anda dan mengumpulkan hal-hal baik dari waktu ke waktu. Sekarang kami dapat berbagi mutiara dengan semua orang :)
Andrzej Martyna
13

Cara termudah adalah kode berikut:

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

Sekarang Anda memiliki string dengan A sebanyak yang dibutuhkan.

Untuk mengisinya dengan Lorem Ipsum atau beberapa string berulang lainnya, buatlah sesuatu seperti pseudocode berikut:

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

Sunting: Jika Anda menyimpan di Unicode Anda mungkin perlu setengah dari jumlah file karena unicode menggunakan dua byte per karakter jika saya ingat dengan benar.

Florian von Spiczak
sumber
4
fileSizeInKB harus berupa fileSizeInBytes .. atau fileSizeInBytes / 2 jika Anda mengeluarkan unicode?
James Gaunt
1
Ya, saya menggunakan nama variabel sampel, nilai yang ditetapkan adalah byte, jadi namanya salah atau nilai yang ditetapkan.
Florian von Spiczak
2

Ada begitu banyak variasi tentang bagaimana Anda bisa melakukan ini. Satu akan, mengisi file dengan banyak karakter. Anda membutuhkan 100KB? Tidak masalah .. 100 * 1024 * 8 = 819200 bit. Satu karakter adalah 16 bit. 819200/16 = 51200. Anda perlu memasukkan 51.200 karakter ke dalam sebuah file. Tetapi pertimbangkan bahwa file mungkin memiliki header / meta data tambahan, jadi Anda mungkin perlu memperhitungkannya dan mengurangi jumlah karakter untuk menulis ke file.

Kon
sumber
0

Sebagai jawaban parsial untuk pertanyaan Anda, saya baru-baru ini membuat aplikasi WPF portabel yang dengan mudah membuat file 'sampah' dari hampir semua ukuran: https://github.com/webmooch/FileCreator

Bosco
sumber