将文件读入内存

将文本文件读入内存。需要用到fseek、fread和ftell函数。

一、三个函数简介
fseek:移动文件流的读写位置

函数原型:int fseek(FILE *stream, long offset, int whence);

参数whence为下列其中一种:
SEEK_SET从距文件开头offset位移量为新的读写位置。
SEEK_CUR 以目前的读写位置往后增加offset个位移量。
SEEK_END将读写位置指向文件尾后再增加offset个位移量。
当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现。

下列是较特别的使用方式:
1) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);
2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);

tips:fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。

fread:用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。

函数原型:size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);

ftell:取得文件流的读取位置
函数原型:long ftell(FILE * stream);
ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。


二、读取文件内容到内存的源码段

FILE* pfin = fopen("test.txt", "r");
if(!pfin){
cout << "File open Error!" <<endl;
exit(1);
}

fseek(pfin, 0, SEEK_END); //将读写位置定位到文件尾
int size = ftell(pfin); //得到文本文件的字节数
char *pbuf = new char[size+1];
fseek(pfin, 0, SEEK_SET); //将读写位置定位到文件头
fread(pbuf, sizeof(char), size, pfin); //将整个文件读入到pbuf所指内存中
fclose(pfin);

cout << pbuf << endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值