fopen中文件的几种打开模式比较

r:只读.
 
 w:只写,有create和truncate语义.
 
 r+:update模式,可以读和写,要求文件必须存在,且没有truncate语义.读和写共用同一个指针位置,且如果读之前有写操作发生,必须调用fflush或者fseek等文件定位操作。比如有文件out.txt:cds 555 ccc.
当以r+模式打开该文件并执行:
FILE* pFile=fopen("out.txt","r+");
fprintf(pFile,"%s","fff");
fflush (pFile);//或者是fseek(pFile,0,SEEK_CUR);
int d=0;
fscanf(pFile,"%d",&d);
cout<

会输出555,并且文件被修改为fff 555 ccc。说明在调用了fprintf后,文件位置指针被移动了。而且如果不写fflush,会出现奇怪的现象,文件被修改为fff,且没有内容被读到d,输出0。

如果是写操作出现在读操作之后发生,那么在写操作之前,必须调用fseek等定位函数,否则不能成功更新文件。比如现在文件out.txt的内容是fff 123 ccc有如下操作:

FILE* pFile=fopen("out.txt","r+");
char str[10];
fscanf(pFile,"%s",str);
cout<

会输出fff,并把文件修改为fff 111 ccc。但如果没有fseek操作,fprintf不会修改文件,文件内容还是fff 123 ccc。

w+:以update模式create文件,如果文件存在那么truncate它。

你可能感兴趣的:(c)