Bir dosya boyutu kriterini karşılamak için bir dosyaya eklemek üzere belirli bir uzunlukta dize nasıl oluşturulur?


114

Dosya boyutuyla ilgili bazı yükleme sorunlarını test etmem gerekiyor. Dosyaları otomatik olarak oluşturacak C # ile yazılmış bir Windows uygulamam var. Her dosyanın boyutunu biliyorum, örn. 100 KB ve kaç dosya oluşturulacağı. Yardıma ihtiyacım olan şey, gerekli dosya boyutundan daha küçük veya ona eşit bir dizenin nasıl oluşturulacağıdır.

sözde kod:

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
Neden bir dizge oluşturmanız gerekiyor? Sadece tamponunuzu yazın.
Lazarus

Diyelim ki, onu sadece "fs.Write (buffer, 0, (int) fileSizeInKB)" yerine Lorem Ipsum metin dosyaları oluşturacak şekilde genişletmek istiyorum.
VajNyiaj

Yanıtlar:


347

Her zaman, bir charkarakterin tekrarlanmasını istediğiniz bir ve birkaç kez alan dize için a yapıcısını kullanabilirsiniz :

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

Bu size 5000 yıldız dizisi verir - ihtiyaçlarınıza göre ince ayar yapın.


83
+1 Atalarımız Stack Overflow'dan önce ne yaptı? Çok basit, çok tatlı.
Dan Solovay

6
Stack overflow, kelimenin tam anlamıyla tüm zamanların en iyi on teknoloji başarısıdır: -Bir kimse onsuz verimli bir şekilde kodlamayı nasıl öğrendi, asla bilemeyeceğiz
Ben Akin

2
Bu kadim zamanlarda oradaydım ve kendimi henüz bir ata gibi hissetmiyorum: D Bu tür incileri bulmanın tek yolu, kodunuzu ve / veya ekibinizin kodunu aramak ve zamanla iyi şeyler biriktirmektir. Artık incileri herkesle paylaşabiliriz :)
Andrzej Martyna

13

En kolay yol şu kod olabilir:

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

Artık gerektiği kadar A içeren bir dizeniz var.

Lorem Ipsum veya başka bir yinelenen dizeyle doldurmak için aşağıdaki sözde kod gibi bir şey oluşturun:

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

Düzenleme: Unicode'da kaydediyorsanız dosya boyutunu yarıya indirmeniz gerekebilir çünkü doğru hatırlıyorsam unicode karakter başına iki bayt kullanır.


4
fileSizeInKB, fileSizeInBytes olmalıdır .. veya unicode çıktısını alıyorsanız fileSizeInBytes / 2?
James Gaunt

1
Evet, örneğin değişken adını kullandım, atanan değer bayt, yani ad yanlış ya da atanan değer.
Florian von Spiczak

2

Bunu nasıl yapacağınıza dair pek çok varyasyon var. Biri, dosyayı bir sürü karakterle doldurun. 100 KB'ye mi ihtiyacınız var? Sorun değil .. 100 * 1024 * 8 = 819200 bit. Tek bir karakter 16 bittir. 819200/16 = 51200. Bir dosyaya 51.200 karakter yapıştırmanız gerekir. Ancak bir dosyanın ek başlık / meta verileri olabileceğini göz önünde bulundurun, bu nedenle bunu hesaba katmanız ve dosyaya yazmak için karakter sayısını azaltmanız gerekebilir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.