2012-12-31 2 views
-1

android ndk에서 C 함수를 사용하여 큰 bmp 파일의 크기를 계산하려고합니다. 나는 다음과 같은 코드를 사용하고 있습니다 : - BMP 파일의 크기가 120 바이트보다 큰 제대로안드로이드에서 C를 사용하여 큰 bmp 파일의 크기를 계산할 수 없습니다.

int getSizeOfCapturedImage(char * imagePath) { 
    FILE *imageFile = fopen(imagePath, "rb"); 
    long sizeOfImageFile = 0; 

    if (imageFile == NULL) { 
     printf("file not found!\n"); //handle error 
     return 1; 
    } else { 
     fseek(imageFile, 0, SEEK_END); 
     sizeOfImageFile = ftell(imageFile); 
     printf("size of ImageFile is %1dB\n", sizeOfImageFile); 
     fclose(imageFile); 
    } 
    return sizeOfImageFile; 
} 

그러나이 기능 나던 작동합니다. 파일이 어떻게 든 열리지 않고 파일 포인터 * imageFile이 NULL이됩니다.

아무도 왜 이런 일이 일어나고 있는지 그리고/또는 다른 방법이 있다고 말할 수 있습니까?

+1

그리고 디스크의 동일한 위치에서 동일한 파일 이름을 사용하여 파일 자체를 대체하고 프로그램을 다시 실행하기 만하면 확인한 것입니까? FILE 버퍼를 할당 할 수 없더라도 메모리가 너무 빡빡하지 않으면이 코드에 아무런 차이가없는 지상적인 이유가 없습니다. 따라서 남은 논리 변수는 전달되는 이름 만 손상 될 수 있습니다. file-not-found 메시지,'printf ("File not found : % d, % s \ n", errno, imagePath);를 사용하여 파일 이름과 errno를 출력하고 유효한지 확인하십시오. – WhozCraig

+0

올바른 imagePath가 파일 열기 함수에 인수로 전달됩니다. 나는 그것을 확인했다. – vikram

+0

그래서'errno'의 보고서 값이 ...인지 확인하는 중입니까? – WhozCraig

답변

1

this SO post을 확인하십시오. 파일을 열기 위해 fopen을 사용할 필요가없는 해결 방법이 있습니다. 사용되는 코드는 다음과 같습니다

#include <sys/stat.h> 

ssize_t fsize(const char *filename) { 
    struct stat st; 

    if (stat(filename, &st) == 0) 
     return st.st_size; 

    return -1; 
} 
@의 H2CO3에 의해

좋은 점 :

데이터 형식이 데이터 형식은 읽거나 단일 작업으로 기록 할 수 블록의 크기를 나타내는 데 사용됩니다 ssize_t . size_t와 비슷한 이지만 서명 된 유형이어야합니다.

+1

'off_t'는 오프셋입니다. 'size_t' (또는 부호없는 정수 오버 플로우에 대처하고 싶지 않으면'ssize_t')를 반환하십시오. –

관련 문제