2013-06-20 1 views
0

나는 총에있는 전체 파일을 읽고, 또한 영화 파일이다. 그런 다음 해당 버퍼를 사용하여 한 번에 50KB와 같은 새 파일을 작성합니다. 그게 틀렸어? 파일 4GB의보다 큰 및 32 비트 컴파일러를 사용하는 경우, 충분한 메모리를 가지고 ...하지만 조심 때까지한 번에 전체 파일을 읽는 것이 좋은 생각입니까?

FILE * pFile; 
    long lSize; 
    char * buffer; 
    size_t result; 

    pFile = fopen ("myfile.bin" , "rb"); 
    if (pFile==NULL) {fputs ("File error",stderr); exit (1);} 

    // obtain file size: 
    fseek (pFile , 0 , SEEK_END); 
    lSize = ftell (pFile); 
    rewind (pFile); 

    // allocate memory to contain the whole file: 
    buffer = (char*) malloc (sizeof(char)*lSize); 
    if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);} 

    // copy the file into the buffer: 
    result = fread (buffer,1,lSize,pFile); 
    if (result != lSize) {fputs ("Reading error",stderr); exit (3);} 

    /* the whole file is now loaded in the memory buffer. */ 

    // terminate 
    fclose (pFile); 
    free (buffer); 
+0

이 방법을 테스트하는 한 가지 방법은 버퍼를 새 파일에 쓰고 비교 유틸리티를 사용하여 버퍼가 동일한 지 확인하는 것입니다. –

답변

1

파일 판독기 모델은 파일 크기 제한이 없기 때문에 파일을 읽는 데 사용되지만 사용할 수있는 메모리 제한이 있습니다. 파일 크기가 메모리에 완전히 저장할 수있을만큼 작 으면 아무 문제가 없습니다. 그러나 예를 들어 4GB + DVD ISO와 같은 미디어 파일을 읽는다면 프로그램이 너무 많은 메모리를 소비하고 저사양 컴퓨터에서 작동하지 않을 것이라고 생각합니다.

+0

최고야! 감사합니다 @ imkrisna – jack

1

그것은 좋아요입니다 : 다음은 샘플 코드입니다.

+1

프로그램이 어디서 실행되는지 모르겠습니다. 컴퓨터에 충분한 메모리가 있다고 확신하는 경우에는 정상이지만 그렇지 않은 경우에는 정상입니다. 그러나 전체 파일에 대해 작업을 수행 할 필요가 없으면 파일 청크를 읽는 것이 좋습니다. – jtomaszk

+0

k 감사합니다. @ Warthel4578 – jack

관련 문제