通常在希望從文件中把數據全都出來賦值給一個數組或者某一個指針,然後再進行相關的數據處理,比如解碼等操作。而在進行賦值以前,數組或者指針都需要進行內存分配,通常對於數組可以直接以文件最大的字節數進行分配,或者指針用malloc也按照最大字節進行分配,但這樣會造成內存浪費,對於追求完美的程序員來講是不能容忍的。所以一種非常適合的方法是在讀取文件具體數據之前,可以提前獲得文件大小,然後利用malloc對指針進行內存分配,然後再進行數據讀取,直接fread對應的數據即可。本文給出了一種最簡單的獲取文件大小的方法。
FILE * fImage;
int Length;
unsigned char * ImageData;
if((fImage=fopen(Bretagne2.j2k,rb))!=NULL)//尋找文件的大小!
{
fseek(fImage,0,SEEK_END);
Length=ftell(fImage);
printf(data size = %ld
,Length);
fseek(fImage,0,SEEK_SET);
ImageData = (unsigned char *)malloc(Length);
fread(ImageData,1,Length,fImage);
if(!ImageData)
{
printf(malloc error!
);
return;
}
fclose(fImage);
}
else
{
printf(Open Data error!
);
return;
}
首先是打開文件,然後將文件指針調整到文件尾部,然後使用ftell獲取文件指針的位置,ftell返回值就是用於得到文件位置指針當前位置相對於文件首的偏移字節數。這樣就很簡單的獲取這個文件的大小了。同時直接使用malloc進行內存分配,然後直接讀取即可,十分方便。