C ++에서 큰 파일을 만드는 가장 빠른 방법?
-
06-07-2019 - |
문제
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 페이지 및 디스크 블록 크기와 반복 된 문자열을 진정으로 효율적으로 작성하고 가정합니다.
- 파일을 엽니 다.
- 반복 된 문자열에 4k * 숯을 할당하며, 페이지 경계에 이상적으로 정렬됩니다.
- 반복 된 문자열을 메모리에 4k 번 인쇄하여 블록을 정확하게 채 웁니다.
- write ()를 사용하여 필요한만큼 블록을 디스크에 쓰십시오. 마지막 블록의 부분 조각을 작성하여 크기가 제대로 나오기를 원할 수도 있습니다.
- 파일을 닫습니다.
이것은 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.
그게 내 최고의 추측입니다. 나는 그것을 할 수있는 방법이 많이 있다고 확신합니다.