C文件创建、写入及读取
1、创建或打开文件函数fopen
(1)描述
C 库函数 FILE *fopen(const char *filename, const char *mode) 使用给定的模式 mode 打开 filename 所指向的文件。
(2)声明
FILE *fopen(const char *filename, const char *mode)
可见次函数为一个指针函数。
(3)参数
1) filename
这是 C 字符串,包含了要打开的文件名称。
2) mode
这是 C 字符串,包含了文件访问模式,模式如下:
r 以只读方式打开文件,该文件必须存在。r+ 打开一个用于更新的文件,可读取也可写入。该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)rb+ 读写打开一个二进制文件,允许读数据。rw+ 读写打开一个文本文件,允许读和写。wb 只写打开或新建一个二进制文件;只允许写数据。wb+ 读写打开或建立一个二进制文件,允许读和写。ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。at+打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+",“w+”,“a+”,而用"rw",“wr”,"ar"等,读者注意所用系统的规定。
二进制和文本模式的区别
在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n"。在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。
3) 返回值
该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。
2、往文件里格式化输出函数fprintf
(1)描述
C 库函数 int fprintf(FILE *stream, const char *format, …) 发送格式化输出到流 stream 中。
(2)声明
int fprintf(FILE *stream, const char *format, …)
(3)参数
1) stream
这是指向 FILE 对象的指针,该 FILE 对象标识了流。
2)format
这是 C 字符串,包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签,format标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是%[flags][width][.precision][length]specifier,具体讲解如下: 参考fprintf函数介绍
3)返回值
如果成功,则返回写入的字符总数,否则返回一个负数。
示例
1) 代码(VC++6.0)
#include
int main ()
{
FILE *fp;//定义一个FILE类型的指针
char buffer[255];//定义一个数组缓存区
fp = fopen("file.txt","w");//打开file.txt文件(若没有则新建),权限为仅可以写入
fprintf(fp,"你好,2021!");//向file.txt文件内写入"你好,2021!"
fclose(fp);//关闭file.txt文件
fp = fopen("file.txt","r");//打开刚刚file.txt文件(file.txt文件已经存在),权限为仅可以读取
fgets(buffer, 255, (FILE*)fp);//函数fgets()从fp所指向的输入流中读取(255-1)个字符
printf("%s\n", buffer );//打印数组缓存区buffer里的内容
fclose(fp);//关闭file.txt文件
return(0);
}
2) 执行效果
编译好,未运行之前截图 执行之后截图如下,可看到新建一个file.txt文本文件 打开文本文件,可见里面写入的内容如下,和程序中一样 其他相关的函数可参考C标准库-