문제

질문:

내가 사용하 fread 파일을 읽으.

typedef struct {
    int ID1;
    int ID2;
    char string[256];
} Reg;

Reg *A = (Reg*) malloc(sizeof(Reg)*size);

size = FILESIZE/sizeof(Reg);

fread (A, sizeof(Reg), size, FILEREAD);

루프를 이용하여 연속적으로 호출한 이 호출을 읽어 내 전체 파일입니다.

무슨 일이 일어날 때 가까이 얻을 파일의 끝,그리고 내가 읽을 수 없습니다"크기"*sizeof(Reg),또는 당신만 읽을 수 있는 절반이 금액을,무슨 일이 일어날로 나열 A.그것은 완료됩니다?기능 오류가 반환됩니다?

는 방법을 알고 파일을 읽 fread 니까?

Edi1:정확히는 경우,이 부분은 정확하지 않을 때,내가 읽고 마지막 작은 파일의 크기는 읽지 않는 것에 파일을지 궁금하네요 나의 벡터의 크기를 조정하는 금액의 바이트는 읽을 수 있는,또는 개발할 동적 better.

도움이 되었습니까?

해결책

fread 읽은 레코드 수를 반환합니다.버퍼에서 그 이상을 초과하는 것은 중요합니다. 그 데이터에 의존하지 마십시오.

Fread는 실제로 읽을 수있는 전체 항목의 수를 반환합니다. 오류가 발생하거나 파일의 끝이있는 경우 수보다 적은 경우 계산하기 전에 발생했습니다.

함수는 파일의 끝 부분을 지나치게 읽지 않습니다. 가장 가능성이있는 경우 파일 크기가 버퍼의 정확한 배수임이 아니라면 전체 버퍼를 얻은 다음 (최종) 부분 버퍼를 읽을 것입니다.길이.

귀하의 논리는이 파일 크기를 수용해야합니다. 파일 크기는 초기화되지 않은 레코드에 해당하는 버퍼의 후행 데이터 (마지막 fread 호출 후)에서 트레일 링 데이터를 무시하기가 어려워서는 안됩니다.'읽는 데 남은 레코드'카운터가 한 가지 접근법이 될 것입니다.

다른 팁

fread() 는 요소의 수를 반환합 그것을 읽을 수 있습니다.그래서 당신의 반환 값을 확인 fread() 는 방법을 찾아 많은 요소에서 당신의 배열은 유효합니다.

그것은이 돌아 짧은 항목을 계산하거나 경 중 오류가 발생하거나 EOF 가에 도달합니다.당신은 당신의 사용 feof()ferror() 이 경우에는 것을 확인하는 조건이 충족된다.

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