C 库函数 - fopen()
包含在stdio.h的头文件内部
C 库函数 FILE *fopen(const char *filename, const char *mode) 使用给定的模式 mode 打开 filename 所指向的文件。
下面是 fopen() 函数的声明。
FILE *fopen(const char *filename, const char *mode)
参数
- filename -- 字符串,表示要打开的文件名称。
- mode -- 字符串,表示文件的访问模式,可以是以下表格中的值:
模式 | 描述 |
---|---|
"r" | 打开一个用于读取的文件。该文件必须存在。 |
"w" | 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。 |
"a" | 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。 |
"r+" | 打开一个用于更新的文件,可读取也可写入。该文件必须存在。 |
"w+" | 创建一个用于读写的空文件。 |
"a+" | 打开一个用于读取和追加的文件。 |
返回值
该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。
实例
下面的实例演示了 fopen() 函数的用法。
实例
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE * fp;
fp = fopen ("file.txt", "w+");
fprintf(fp, "%s %s %s %d", "We", "are", "in", 2014);
fclose(fp);
return(0);
}
让我们编译并运行上面的程序,这将创建一个带有一下内容的文件 file.txt:
We are in 2014
mode 还有有下列几种形态字符串:
- rb+ 读写打开一个二进制文件,允许读数据。
- rw+ 读写打开一个文本文件,允许读和写。
- a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
- wb 只写打开或新建一个二进制文件;只允许写数据。
- wb+ 读写打开或建立一个二进制文件,允许读和写。
- ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
- at+ 打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。
读取字符串到缓冲区,并打印在终端
字符串读取函数- fgetc()
包含在stdio.h的头文件内部
C 库函数 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。
下面是 fgetc() 函数的声明。
int fgetc(FILE *fp)
参数
- fp -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流。
fp 为文件指针。fgetc() 读取成功时返回读取到的字符,读取到文件末尾或读取失败时返回EOF
。
EOF 是 end of file 的缩写,表示文件末尾,是在 stdio.h 中定义的宏,它的值是一个负数,往往是 -1。fgetc() 的返回值类型之所以为 int,就是为了容纳这个负数(char不能是负数)。
下面的实例演示了 fgetc() 函数的用法。
#include<stdio.h>
int main()
{
FILE *fp;
char ch;
//如果文件不存在,给出提示并退出
if( (fp=fopen("file.txt","rt")) == NULL )
{
printf("Fail to open file!\n");
return -1;
}
//每次读取一个字节,直到读取完毕
while( (ch=fgetc(fp)) != EOF )
{
printf("%c", c);
}
fclose(fp);
return 0;
}
让我们编译并运行上面的程序,这将产生以下结果:
We are in 2014