2015-01-28 6 views
1

나는 C가 좋지 않아 간단하게하려고합니다. 나는 이진 파일을 열어 1024 바이트의 데이터 블록을 읽고 버퍼에 덤프하고, 버퍼를 처리하고, 또 다른 1024 바이트의 데이터를 읽고 EOF가 될 때까지이 작업을 계속하고 싶다. 어떻게 버퍼링을하고 싶은지 어떻게 알지만 루프 부분과 파일 I/O가 계속 붙어 있습니다.C로 이진 파일 읽기 (청크)

의사 코드 :

FILE *file; 
unsigned char * buffer[1024]; 

fopen(myfile, "rb"); 

while (!EOF) 
{ 
    fread(buffer, 1024); 
    //do my processing with buffer; 
    //read next 1024 bytes in file, etc.... until end 
} 
+2

'fread'가 잘못되었습니다. 그리고'fopen '의 반환 값을 아무 것도 지정하지 않는다면, 적어도이 함수에 대한 매뉴얼 페이지를 읽었습니까? –

+3

'while (! EOF) {...}'EOF는 상수입니다. 주의 :'fread()'는 4 개의 인수를 취합니다. 그리고 값을 반환합니다. – wildplasser

+0

필수 : ​​http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong –

답변

9

fread()는 읽은 바이트 수를 반환합니다. 0 시까 지 반복 할 수 있습니다.

FILE *file = NULL; 
unsigned char buffer[1024]; // array of bytes, not pointers-to-bytes 
size_t bytesRead = 0; 

file = fopen(myfile, "rb"); 

if (file != NULL)  
{ 
    // read up to sizeof(buffer) bytes 
    while ((bytesRead = fread(buffer, 1, sizeof(buffer), file)) > 0) 
    { 
    // process bytesRead worth of data in buffer 
    } 
}