문제

C ++에서 평평한 텍스트 파일을 약 50-100MB로 작성하여 '추가 된 첫 줄'을 파일에 4 백만 번 삽입해야합니다.

도움이 되었습니까?

해결책

구식 파일 IO 사용

포펜 쓰기 파일.

FSEEK 원하는 파일 크기 -1.

fwrite 단일 바이트

fclose 파일

다른 팁

특정 크기의 파일을 만드는 가장 빠른 방법은 단순히 단순히 제로 길이 파일을 작성하는 것입니다. creat() 또는 open() 그런 다음 사용 크기를 변경하십시오 chsize(). 이것은 파일의 디스크에 블록을 단순히 할당하면 내용은 해당 블록에서 발생한 일이 될 것입니다. 버퍼 쓰기가 발생할 필요가 없기 때문에 매우 빠릅니다.

질문을 이해하는지 확실하지 않습니다. 파일의 모든 문자가 인쇄 가능한 ASCII 문자인지 확인하고 싶습니까? 그렇다면 이것에 대해? "abcdefghabc ...."로 파일을 채 웁니다.

#include <stdio.h>
int main ()
{
   const int FILE_SiZE = 50000; //size in KB
   const int BUFFER_SIZE = 1024;
   char buffer [BUFFER_SIZE + 1];
   int i;
   for(i = 0; i < BUFFER_SIZE; i++)
      buffer[i] = (char)(i%8 + 'a');
   buffer[BUFFER_SIZE] = '\0';

   FILE *pFile = fopen ("somefile.txt", "w");
   for (i = 0; i < FILE_SIZE; i++)
     fprintf(pFile, buffer);

   fclose(pFile);

   return 0;
}

OS를 언급하지는 않았지만 Creat/Open/Close/Write를 사용할 수 있다고 가정하겠습니다.

4K 페이지 및 디스크 블록 크기와 반복 된 문자열을 진정으로 효율적으로 작성하고 가정합니다.

  1. 파일을 엽니 다.
  2. 반복 된 문자열에 4k * 숯을 할당하며, 페이지 경계에 이상적으로 정렬됩니다.
  3. 반복 된 문자열을 메모리에 4k 번 인쇄하여 블록을 정확하게 채 웁니다.
  4. write ()를 사용하여 필요한만큼 블록을 디스크에 쓰십시오. 마지막 블록의 부분 조각을 작성하여 크기가 제대로 나오기를 원할 수도 있습니다.
  5. 파일을 닫습니다.

이것은 fopen ()와 친구의 버퍼링을 우회합니다. .

이것은 C ++ 또는 C로 쉽게 작성할 수 있지만 효율성을 위해 ioStream 또는 STDIO 대신 POSIX 호출을 사용한다고 가정하므로 핵심 라이브러리 사양을 벗어납니다.

C ++에서 큰 파일을 만드는 가장 빠른 방법?확인. 나는 가장 빠른 방법이 가장 작은 시간이 걸리는 것을 의미한다고 가정합니다.

C ++에서 평평한 텍스트 파일을 약 50-100MB로 만듭니다. 컨텐츠 '추가 된 첫 줄'을 4 백만 번 파일에 삽입해야합니다.

구식 파일 io를 사용하여 파일을 prealloce하십시오

fopen the file for write.
fseek to the desired file size - 1.
fwrite a single byte
fclose the file

create a string containing the "Added first line\n" a thousand times.
find it's length.

구식 파일 io를 사용하여 파일을 prealloce하십시오

fopen the file for write.
fseek to the the string length * 4000
fwrite a single byte
fclose the file

open the file for read/write
loop 4000 times, 
    writing the string to the file.
close the file.

그게 내 최고의 추측입니다. 나는 그것을 할 수있는 방법이 많이 있다고 확신합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top