http://www.cplusplus.com/
方法一:
long filesize( char * pFileName )
{
long int save_pos;
long size_of_file;
FILE * fp = fopen( pFileName ,"r+b" );
/* Save the current position. */
save_pos = ftell( fp );
/* Jump to the end of the file. */
fseek( fp, 0L, SEEK_END );
/* Get the end position. */
size_of_file = ftell( fp );
/* Jump back to the original position. */
fseek( fp, save_pos, SEEK_SET );
fclose(fp);
return( size_of_file );
}
注意,当文件很大的时候,返回 -1;
所以要修改一下:
long filesize(char * pFileName)
{
long long save_pos;
long long size_of_file;
FILE * fp = fopen(pFileName, "rb");
//save_pos = ftell(fp);
//fseek(fp, 0L, SEEK_END);
//size_of_file = ftell(fp);
//fseek(fp, save_pos, SEEK_SET);
save_pos = _ftelli64(fp);
_fseeki64(fp, 0L, SEEK_END);
size_of_file = _ftelli64(fp);
_fseeki64(fp, save_pos, SEEK_SET);
fclose(fp);
return(size_of_file);
}
方法二:
#include <io.h>
long filelen( char * pFileName )
{
FILE * f = fopen( pFileName , "r+b");
int handle = fileno(f) ;
long nlen = filelength( handle );
fclose(f);
return nlen;
}
static std::vector<uint8_t> * read_file(char * pstrFileName)
{
int nFileLen = file_len(pstrFileName);
if (nFileLen == 0)
{
return NULL;
}
FILE * f = fopen(pstrFileName, "r+b");
if (f==NULL)
{
return NULL;
}
std::vector<uint8_t> * pvbuf = new std::vector<uint8_t>(nFileLen);
//fread(&((*pvbuf)[0]), 1, nFileLen, f);
fread(pvbuf->data(), 1, nFileLen, f);
fclose(f);
{
FILE * f = fopen("E:\\testFileread.buf", "w+b");
fwrite(pvbuf->data(), 1, pvbuf->size(), f);
fclose(f);
}
return pvbuf;
}