ファイルサイズ基準を満たすためにファイルに挿入する特定の長さの文字列を生成する方法は?


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、

たとえば、「fs.Write(buffer、0、(int)fileSizeInKB)」だけでなく、Lorem Ipsumテキストファイルを生成するように拡張したいとします。
VajNyiaj

回答:


344

文字列のコンストラクターをいつでも使用できます。これは、charその文字を繰り返したいときに必要な回数だけかかります。

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

これにより、5000の星の列が得られます-必要に応じて調整してください。


83
+1スタックオーバーフローの前に、祖先は何をしましたか?とてもシンプルでとても甘い。
Dan Solovay 2013

6
スタックオーバーフローは、文字通り史上トップ10の技術的成果です:-D誰もがそれなしで効率的にコーディングする方法を学んだことは、私たちにはわかりません
Ben Akin

2
私はそこにいたのですが、古代にはまだ先祖のようには感じられません:Dそのような真珠を見つける唯一の方法は、コードやチームのコードを検索して、時間の経過とともに良いものを蓄積することでした。真珠をみんなと共有できるようになりました:)
Andrzej Martyna

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は、私が正しく覚えている場合、文字ごとに2バイトを使用するためです。


4
ユニコードを出力している場合、fileSizeInKBはfileSizeInBytes ..またはfileSizeInBytes / 2になりますか?
James Gaunt、2011

1
はい、サンプルの変数名を使用しました。割り当てられた値はバイトなので、名前が間違っているか、割り当てられた値です。
Florian von Spiczak、2011

2

これを行う方法には非常に多くのバリエーションがあります。1つは、charの束でファイルを埋めることです。100KBが必要ですか?問題ありません。100* 1024 * 8 = 819200ビット。1つの文字は16ビットです。819200/16 =51200。51,200文字をファイルに貼り付ける必要があります。ただし、ファイルには追加のヘッダー/メタデータが含まれる可能性があるため、そのことを考慮して、ファイルに書き込む文字数を減らす必要がある場合があることを考慮してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.