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;
}
本文介绍两种获取文件大小的方法及一种文件读取方法。方法一使用C标准库函数,通过指针定位来确定文件长度;方法二利用_io.h_中的filelength函数直接获取文件大小。此外还提供了一个示例函数用于读取文件到内存。

3641

被折叠的 条评论
为什么被折叠?



