fread 返回的是所有被读取的字节数,假如数目不等于请求的字节数,说明有错误发生或者到达文件结束标志(End of File)。
下面写了个读取完整文件的程序将功补过:
/* fread 读取大文件样例 */
#include <stdio.h>
#include <stdlib.h>
int main (char argc, char **argv)
{
char * fileName;
if (argc != 2)
{
printf ("Usage: a.out filename./n");
exit (1);
}
else { fileName = argv[1];}
FILE * pFile;
long lSize;
char * buffer;
pFile = fopen ( fileName, "rb" );
if (pFile==NULL)
{
perror ("Error opening file");
exit (1);
}
// 获取文件大小.
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
printf("File size = %d/n", lSize);
rewind (pFile);
// 分配内存以包含整个文件
buffer = (char*) malloc (lSize);
if (buffer == NULL)
{
perror ("Couldn't allocate memory/n");
exit (2);
}
// 拷贝文件到缓冲区
long n;
n = fread (buffer,1,lSize,pFile);
printf("Read size = %ld/n", n);
/*** 整个文件被加载到缓冲区. ***/
if (!ferror (pFile))
printf ("No errors while reading./n");
else perror ("Some errors happened./n");
// 终止并释放缓冲区
fclose (pFile);
free (buffer);
return 0;
}
$ ./read_complete_file hacker.mpg
File size = 115115008
Read size = 115115008
No errors while reading.
fread 读文件问题(csdn)
最新推荐文章于 2023-03-30 10:43:22 发布
http://topic.csdn.net/t/20030912/21/2254341.html