fopen参数
FILE * fopen(const char * path,const char * mode);
参数mode字符串则代表着流形态。
mode有下列几种形态字符串:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。
有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。
fopen函数的模式字符串可以用6个字符组成
r(read) 读
w(write) 写
a(append) 追加
t(text) 文本模式
b(banary) 二进制模式
+ 读取和写入
fprintf、fscanf的读写对象不是终端而是磁盘文件
fprintf()函数原型//向文件中写入数据
fprintf(文件指针,格式控制串,输出列表)
输出列表中的数据,按照格式控制串的格式写入由fp所指的文件。
实例代码
int main(void)
{
int i = 50;
FILE *fp;
fp = fopen("student.txt", "w");
if (fp == NULL)
{
printf("打开失败");
exit(0);
}
fprintf(fp, "%d", i);//把i的值按照%d的格式写入到fp所指向的文件中
fclose(fp);
return 0;
}
fscanf()函数原型//从文件中读取数据
fscanf(文件指针,格式控制串,输入列表);
按照格式控制串的格式从文件指针中读取数据,并写入到输入列表
int main(void)
{
int i;
FILE *fp;
fp = fopen("student.txt", "r");
if (fp == NULL)
{
printf("打开失败");
exit(0);
}
fscanf(fp, "%d", &i);//按照%d的格式从fp所指向的文件中读取数据,并写入到变量i中
printf("%d", i);
fclose(fp);
system("pause");
return 0;
}
fputs()函数原型//向文件中写入字符串
fputs
函数的功能是向指定的文件写入一个字符串,其调用形式为:
fputs(字符串,文件指针)
其中字符串可以是字符串常量,也可以是字符数组名,或指针变量;
例如
fputs("abcde",fp);//把字符串"abcde"写入到fp所指向的文件中,fp为文件指针
char ch[80] = {"000000"};
fputs(ch,fp);//把字符数组ch写入到fp中
fgets//读字符串函数
函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:fgets(字符数组名,n,文件指针);
其中的n是一个正整数。表示从文件中读出的字符串不超过n-1个字符。在读入的最后一个字符后加上串结束标志'\0'
例如:
fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中