파일 크기 기준을 충족하기 위해 파일에 삽입 할 특정 길이의 문자열을 생성하는 방법은 무엇입니까?


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

답변:


347

a char및 해당 문자를 반복하려는 횟수 를 취하는 문자열에 대해 항상 a 생성자를 사용할 수 있습니다 .

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

이것은 당신에게 5000 개의 별을 제공합니다-당신의 필요에 따라 조정하십시오.


83
+1 우리 조상들은 Stack Overflow 이전에 무엇을 했습니까? 너무 간단하고 달콤합니다.
Dan Solovay

6
스택 오버플로가 효율적으로하지 않고 코드에 배운 도대체 누구, 우리는 결코 알지 못할 것이다 어떻게 모든 시간 - D의 문자 위에 열 기술 성과이다
벤 아킨

2
나는 고대에 거기에 있었고 아직 조상처럼 느껴지지 않았습니다 .D 그런 진주를 찾는 유일한 방법은 당신의 코드 및 / 또는 팀의 코드를 검색하고 시간이 지남에 따라 좋은 것들을 축적하는 것입니다. 이제 우리는 :) 사람들과 진주를 공유 할 수 있습니다
의 Andrzej 마르티나에게

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

편집 : 유니 코드로 저장하는 경우 올바르게 기억하면 유니 코드가 문자 당 2 바이트를 사용하기 때문에 파일 크기의 절반이 필요할 수 있습니다.


4
fileSizeInKB는 fileSizeInBytes .. 또는 fileSizeInBytes / 2 여야합니다. 유니 코드를 출력하는 경우?
James Gaunt

1
예, 샘플의 변수 이름을 사용했습니다. 할당 된 값은 바이트이므로 이름이 잘못되었거나 할당 된 값입니다.
Florian von Spiczak

2

이를 수행하는 방법에는 많은 변형이 있습니다. 하나는 파일을 여러 문자로 채우는 것입니다. 100KB가 필요하십니까? 문제 없습니다. 100 * 1024 * 8 = 819200 비트. 단일 문자는 16 비트입니다. 819200/16 = 51200. 파일에 51,200 개의 문자를 붙여야합니다. 그러나 파일에 추가 헤더 / 메타 데이터가있을 수 있으므로이를 고려하고 파일에 쓸 문자 수를 줄여야 할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.