VC读写函数详解针对文件资料.docx
- 文档编号:28150542
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:15
- 大小:17.62KB
VC读写函数详解针对文件资料.docx
《VC读写函数详解针对文件资料.docx》由会员分享,可在线阅读,更多相关《VC读写函数详解针对文件资料.docx(15页珍藏版)》请在冰豆网上搜索。
VC读写函数详解针对文件资料
VC读写函数详解
1.当前文件指针位置获取函数
longftell(FILE*stream);
参数:
stream文件指针
返回值:
当前文件指针的位置
实例:
#include
FILE*stream;
voidmain(void)
{
longposition;
charlist[100];
if((stream=fopen("ftell.c","rb"))!
=NULL)
{
/*Movethepointerbyreadingdata:
*/
fread(list,sizeof(char),100,stream);
/*Getpositionafterread:
*/
position=ftell(stream);
printf("Positionaftertryingtoread100bytes:
%ld\n",
position);
fclose(stream);
}
}
输出:
Positionaftertryingtoread100bytes:
100
2.文件的打开函数
FILE*fopen(constchar*filename,constchar*mode);
FILE*_wfopen(constwchar_t*filename,constwchar_t*mode);
参数:
filename文件的名称mode打开文件的模式
返回值:
成功的打开文件的话返回文件的指针否则返回NULL表示打开文件错误
注:
"r"
只读方式打开
"w"
以写入方式打开
"a"
从文件的尾端写入数据,要是文件不存在则创建后写入数据
"r+"
以读写方式打开(文件必须存在)
"w+"
打开一个可以读写的文件,如果该文件存在则覆盖写入
"a+"
打开文件并追加写入
源于
实例:
#include
FILE*stream,*stream2;
voidmain(void)
{
intnumclosed;
/*Openforread(willfailiffile"data"doesnotexist)*/
if((stream=fopen("data","r"))==NULL)
printf("Thefile'data'wasnotopened\n");
else
printf("Thefile'data'wasopened\n");
/*Openforwrite*/
if((stream2=fopen("data2","w+"))==NULL)
printf("Thefile'data2'wasnotopened\n");
else
printf("Thefile'data2'wasopened\n");
/*Closestream*/
if(fclose(stream))
printf("Thefile'data'wasnotclosed\n");
/*Allotherfilesareclosed:
*/
numclosed=_fcloseall();
printf("Numberoffilesclosedby_fcloseall:
%u\n",numclosed);
}
输出:
Thefile'data'wasopened
Thefile'data2'wasopened
Numberoffilesclosedby_fcloseall:
1
3.文件读取函数
size_tfread(void*buffer,size_tsize,size_tcount,FILE*stream)
参数:
buffer文件读取缓冲区size读取数据的类型count读取数据的个数stream文件指针
返回值:
实际读取的数据个数
源于
例子:
FILE*fp;
char*buffer=newchar[1024];
longrealLength=fread(buffer,sizeof(char),1024,fp);
//
//处理过程
//
deletebuffer;
fclose(fp);
4.文件的写入函数
size_tfwrite(constvoid*buffer,size_tsize,size_tcount,FILE*stream);
参数:
buffer所要写入文件的缓冲区size写入数据的类型count写入数据的个数stream文件指针
返回值:
实际写入的数据个数
源于
实例:
#include
voidmain(void)
{
FILE*stream;
charlist[30];
inti,numread,numwritten;
/*Openfileintextmode:
*/
if((stream=fopen("fread.out","w+t"))!
=NULL)
{
for(i=0;i<25;i++)
list[i]=(char)('z'-i);
/*Write25characterstostream*/
numwritten=fwrite(list,sizeof(char),25,stream);
printf("Wrote%ditems\n",numwritten);
fclose(stream);
}
else
printf("Problemopeningthefile\n");
if((stream=fopen("fread.out","r+t"))!
=NULL)
{
/*Attempttoreadin25characters*/
numread=fread(list,sizeof(char),25,stream);
printf("Numberofitemsread=%d\n",numread);
printf("Contentsofbuffer=%.25s\n",list);
fclose(stream);
}
else
printf("Filecouldnotbeopened\n");
}
输出:
Wrote25items
Numberofitemsread=25
Contentsofbuffer=zyxwvutsrqponmlkjihgfedcb
5.文件指针搜索函数
intfseek(FILE*stream,longoffset,intorigin)
参数:
stream文件指针offset从当前指针开始的偏移量origin文件指针当前的位置
返回值:
成功返回0否则返回非零值
注:
指针移动的时候是按字节移动的,要是成功的话文件的指针将指向当前搜索到的位置
origin可以的取值在stdio.h已经定义如下:
SEEK_CUR
当前的文件指针
SEEK_END
文件结束
SEEK_SET
文件的开始
源于
实例:
#include
voidmain(void)
{
FILE*stream;
charline[81];
intresult;
stream=fopen("fseek.out","w+");
if(stream==NULL)
printf("Thefilefseek.outwasnotopened\n");
else
{
fprintf(stream,"Thefseekbeginshere:
"
"Thisisthefile'fseek.out'.\n");
result=fseek(stream,23L,SEEK_SET);
if(result)
printf("Fseekfailed");
else
{
printf("Filepointerissettomiddleoffirstline.\n");
fgets(line,80,stream);
printf("%s",line);
}
fclose(stream);
}
}
输出:
Filepointerissettomiddleoffirstline.
Thisisthefile'fseek.out'.
6.按固定的格式写入数据函数
intfprintf(FILE*stream,constchar*format[,argument]...)
intfwprintf(FILE*stream,constwchar_t*format[,argument]...)
参数:
stream文件指针format按照一定的格式argument可选参数列表
返回值:
fprintf返回实际写入的字节数.fwprintf返回实际写入的wchar_t的字节数
源于
实例:
#include
#include
FILE*stream;
voidmain(void)
{
int i=10;
doublefp=1.5;
char s[]="thisisastring";
char c='\n';
stream=fopen("fprintf.out","w");
fprintf(stream,"%s%c",s,c);
fprintf(stream,"%d\n",i);
fprintf(stream,"%f\n",fp);
fclose(stream);
system("typefprintf.out");
}
输出:
thisisastring
10
1.500000
7.按固定的格式读入数据函数
intfscanf(FILE*stream,constchar*format[,argument]...)
intfwscanf(FILE*stream,constwchar_t*format[,argument]...)
参数:
stream文件指针format按照一定的格式argument可选参数列表
返回值:
fscanf返回实际读入的字节数.fwscanf返回实际读入的wchar_t的字节数
如果返回值为0则说明没有被赋值
如果有文件结束或是异常的IO错误时返回EOF(宏定义)
源于
实例:
#include
FILE*stream;
voidmain(void)
{
longl;
floatfp;
chars[81];
charc;
stream=fopen("fscanf.out","w+");
if(stream==NULL)
printf("Thefilefscanf.outwasnotopened\n");
else
{
fprintf(stream,"%s%ld%f%c","a-string",
65000,3.14159,'x');
/*Setpointertobeginningoffile:
*/
fseek(stream,0L,SEEK_SET);
/*Readdatabackfromfile:
*/
fscanf(stream,"%s",s);
fscanf(stream,"%ld",&l);
fscanf(stream,"%f",&fp);
fscanf(stream,"%c",&c);
/*Outputdataread:
*/
printf("%s\n",s);
printf("%ld\n",l);
printf("%f\n",fp);
printf("%c\n",c);
fclose(stream);
}
}
输出:
a-string
65000
3.141590
X
8.文件指针的定位和获取
intfsetpos(FILE*stream,constfpos_t*pos);
intfgetpos(FILE*stream,constfpos_t*pos);
参数:
stream目标文件指针pos文件指针的位置
返回值:
设置指针位置成功的话fsetpos返回0否则返回一个非零的数
获得指针位置成功的话fgetpos返回0否则返回一个非零的数
源于
实例:
#include
voidmain(void)
{
FILE *stream;
fpos_tpos;
char buffer[20];
if((stream=fopen("fgetpos.c","rb"))==NULL)
printf("Troubleopeningfile\n");
else
{
/*Readsomedataandthenchecktheposition.*/
fread(buffer,sizeof(char),10,stream);
if(fgetpos(stream,&pos)!
=0)
printf("fgetposerror");
else
{
fread(buffer,sizeof(char),10,stream);
printf("10bytesatbyte%I64d:
%.10s\n",pos,buffer);
}
/*Setanewpositionandreadmoredata*/
pos=140;
if(fsetpos(stream,&pos)!
=0)
printf("fsetposerror");
fread(buffer,sizeof(char),10,stream);
printf("10bytesatbyte%I64d:
%.10s\n",pos,buffer);
fclose(stream);
}
}
输出:
10bytesatbyte10:
.C:
Thisp
10bytesatbyte140:
.Candthe
9.文件指针重新定位到开始
voidrewind(FILE*stream)
参数:
stream文件指针
返回值:
无
注:
执行完本函数后,文件的指针将返回到开始位置
实例:
#include
voidmain(void)
{
FILE*stream;
intdata1,data2;
data1=1;
data2=-37;
if((stream=fopen("rewind.out","w+"))!
=NULL)
{
fprintf(stream,"%d%d",data1,data2);
printf("Thevalueswrittenare:
%dand%d\n",data1,data2);
rewind(stream);
fscanf(stream,"%d%d",&data1,&data2);
printf("Thevaluesreadare:
%dand%d\n",data1,data2);
fclose(stream);
}
}
输出:
Thevalueswrittenare:
1and-37
Thevaluesreadare:
1and-37
10.取得文件指针所指的行
char*fgets(char*string,intn,FILE*stream);
intfputs(constchar*string,FILE*stream);
参数:
fgets的string保存到的字符串缓冲,而fputs的string表示要写入的字符串
n表示从文件中读出的字符串不超过n-1个字符,在读入的最后一个字符后加上串结束标志'\0'
stream文件指针
返回值:
成功的话返回字符数组的首地址否则返回NULL
源于
实例:
#include
voidmain(void)
{
FILE*stream;
charline[100];
if((stream=fopen("fgets.c","r"))!
=NULL)
{
if(fgets(line,100,stream)==NULL)
printf("fgetserror\n");
else
printf("%s",line);
fclose(stream);
}
fputs("Helloworldfromfputs.\n",stdout);
}
输出:
Thisprogramusesfgetstodisplay
Helloworldfromfputs.
11.关闭文件函数
int_fcloseall(void)
intfclose(FILE*stream)
参数:
stream文件指针
返回值:
fclose成功关闭返回0否则返回EOF表示错误
_fcloseall成功返回总共关闭的文件数否则的话返回EOF表示错误
实例:
#include
FILE*stream,*stream2;
voidmain(void)
{
intnumclosed;
/*Openforread(willfailiffile"data"doesnotexist)*/
if((stream=fopen("data","r"))==NULL)
printf("Thefile'data'wasnotopened\n");
else
printf("Thefile'data'wasopened\n");
/*Openforwrite*/
if((stream2=fopen("data2","w+"))==NULL)
printf("Thefile'data2'wasnotopened\n");
else
printf("Thefile'data2'wasopened\n");
/*Closestream*/
if(fclose(stream))
printf("Thefile'data'wasnotclosed\n");
/*Allotherfilesareclosed:
*/
numclosed=_fcloseall();
printf("Numberoffilesclosedby_fcloseall:
%u\n",numclosed);
}
输出:
Thefile'data'wasopened
Thefile'data2'wasopened
Numberoffilesclosedby_fcloseall:
1
完
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 读写 函数 详解 针对 文件 资料