加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

细说c语言中的“r”“w”“a”

(2013-02-11 19:27:00)
标签:

it

分类: c语言
细说c语言中的“r”“w”“a”
1:r 以可读写方式打开文件,该文件必须存在
2:w以写方式打开文件,只能够向文件中写东西,而且如果文件不存在,系统会自动建一个同名的文件,如果文件已经存在,
那么文件中的东西会全部被覆盖:
举个例子:
#include
#include
void main()
{
FILE *in;
if((in=fopen("file.out","w"))==NULL)
{
printf("file cannot be open");
exit(0);
}
char ch[20]="microsoft";
fputs(ch,in);
fclose(in);
}
上面这个程序中,如果我们建的工程下面没有file.out,那么会自动建一个file.out的文件,并在里面写上microsoft内容,
如果已经有了file.out,那么file.out里面的内容会全部消失,代替的只有microsoft,比如里面内容是my name is yuanqiao,那么程序执行后,里面就只有microsoft
3:a以写方式打开文件,它和w的区别就是它不会破坏原内容,只是在原内容后面添加输入的内容;同样是上面的例子,里面内容是my name is yuanqiao,程序执行后,里面的内容变成my name is yuanqiaomicrosoft,而且每执行一次,里面的内容会增加一次,比如,我们运行了一次程序后,再执行一次,那么里面的内容会变成my name is yuanqiaomicrosoftmicrosoft
4:r+以读写方式打开文件,文件可以使用文件的读取方式fgetc fgets fscanf fread读出来,并用putchar puts printf等方式输入到屏幕上,
它和a的写的方式是一样的,这里不再累述。
5:w+以读写方式打开文件,写的方式和w一样,就是多了一个读取文件的功能。
6:a+以读写方式打开文件,和r+没有差别,
大家可以用下面这个程序做实验:
不断的改变打开的方式,和程序的运行次数,来看程序的执行效果:
#include
#include
void main()
{
FILE *in;
if((in=fopen("file.out","a+"))==NULL)
{
printf("file cannot be open");
exit(0);
}
while(!feof(in))
putchar(fgetc(in)); //用putchar将fgetc读取出来的字符一个一个现实到屏幕上。
char ch[20]="microsoft";
fputs(ch,in); //用fputs将字符串写到文件中。
fclose(in);
}
补充:
最近我做题,发现了一个关于“w”的更加隐秘的知识:
当我们以w或者w+的方式打开一个文件时,无论文件存在与否,新写的内容都会将原来文件里的内容全部覆盖,但是如果
文件已经是打开的状态,那么,再向文件写内容时,新内容覆盖的只是此时文件指针所在的地方:例子
#include
void main()
{
FILE *fp;
char *s1="china",*s2="beijing";
fp=fopen("in.dat","w"); //此时是第一次打开文件,所以下面这个fwrite会覆盖我in.dat里面的全部内容(我里面原来的内容是hello world!)
fwrite(s2,7,1,fp); //hello world!被beijing全部覆盖,
rewind(fp); //使文件指针回到文件的开始处;
fwrite(s1,5,1,fp); //此时文件已处于打开状态,所以新写的内容只会覆盖此时指针所在的位置,即将beiji这5个字母覆盖
fclose(fp);
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有