1、一次性把文件读入到内存当中,直接对内存进行 *** 作。这样总的运行时间会比一边读文件一边 *** 作的时间要少。
2、步骤:
1)验证该文件是否存在,并获取文件大小;
2)根据文件大小申请一个足够大的缓冲(假定内存足够的话);
3)fread将整个文件装入缓冲;
4)对缓存进行 *** 作。
例程:
#include<stdio.h>#include<string.h>
int main(void)
{
FILE*stream
char buf[2000] //字符数组作为缓存
if((stream=fopen("文件.txt","r"))==NULL) //打开文件
{
fprintf(stderr,"Cannot open outputfile.\n")
return 0
}
fread(buf,sizeof(buf),1,stream) //读取文件内容到缓存当中
printf("%s\n",buf)
//直接对缓存进行 *** 作
fclose(stream)
return0
}
通过以下代码获取文件大小,然后分配相应大小的内存,一次性读取文件到此内存就可以加快读取速度了。具体代码如下:#include <stdio.h>
#include <stdlib.h>
int main ()
{
FILE * pFile
long lSize
char * buffer
size_t result
/* 若要一个byte不漏地读入整个文件,只能采用二进制方式打开 */
pFile = fopen ("test.txt", "rb" )
if (pFile==NULL)
{
fputs ("File error",stderr)
exit (1)
}
/* 获取文件大小 */
fseek (pFile , 0 , SEEK_END)
lSize = ftell (pFile)
rewind (pFile)
/* 分配内存存储整个文件 */
buffer = (char*) malloc (sizeof(char)*lSize)
if (buffer == NULL)
{
fputs ("Memory error",stderr)
exit (2)
}
/* 将文件拷贝到buffer中 */
result = fread (buffer,1,lSize,pFile)
if (result != lSize)
{
fputs ("Reading error",stderr)
exit (3)
}
/* 现在整个文件已经在buffer中,可由标准输出打印内容 */
printf("%s", buffer)
/* 结束演示,关闭文件并释放内存 */
fclose (pFile)
free (buffer)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)