-1

Android ndk で 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;
}

ただし、bmp ファイルのサイズが 120 バイトを超える場合、この機能は正しく動作しません。どういうわけかファイルが開かず、ファイル ポインタ *imageFile が NULL になります。

なぜこれが起こっているのか、および/または別の方法があるのか​​ 誰か教えてもらえますか?

4

1 に答える 1

1

fopen を使用してファイルを開く必要のない回避策があるこの SO 投稿を確認してください。使用されるコードは次のとおりです。

#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 このデータ型は、1 回の操作で読み書きできるブロックのサイズを表すために使用されます。size_t に似ていますが、符号付きの型でなければなりません。

于 2012-12-31T05:41:03.793 に答える