2012-12-31 39 views
-1

我试图计算使用C函数中的Android NDK大bmp文件的大小来计算用C大bmp文件的大小。我正在使用以下代码: -无法在Android的

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; 
} 

但是,此功能在bmp文件的大小大于120个字节时不起作用。该文件不知何故无法打开,文件指针* imageFile变为NULL。

谁能告诉我这是为什么发生的和/或有另一条出路?

+1

而你这个使用相同的文件名在同一位置上的磁盘,只替换文件本身并重新运行程序验证?没有地球上的原因文件大小会对这段代码产生任何影响,除非你的内存太紧了,即使FILE缓冲区不能被分配,所以剩下的唯一逻辑变量是被传入的名字可能已经损坏了。使用文件未找到的消息“printf(”文件未找到:%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',如果你不想处理无符号整数溢出)。 – 2012-12-31 07:12:02