打开方式(mode)有多种,见下表:
打开方式 说明
r 以只读方式打开文件,只允许读取,不允许写入。该文件必须存在。
r+ 以读/写方式打开文件,允许读取和写入。该文件必须存在。
rb+ 以读/写方式打开一个二进制文件,允许读/写数据。
rt+ 以读/写方式打开一个文本文件,允许读和写。
w 以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。
w+ 以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)。
a+ 以追加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符 不保留)。
wb 以只写方式打开或新建一个二进制文件,只允许写数据。
wb+ 以读/写方式打开或建立一个二进制文件,允许读和写。
wt+ 以读/写方式打开或建立一个文本文件,允许读写。
at+ 以读/写方式打开一个文本文件,允许读或在文本末追加数据。
ab+ 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
文本文件和二进制文件的区别请查看:C语言fopen()打开文本文件与二进制文件的区别
几点说明
1) 文件打开方式由r、w、a、t、b、+ 六个字符拼成,各字符的含义是:
r(read):读
w(write):写
a(append):追加
t(text):文本文件,可省略不写
b(banary):二进制文件
+:读和写
2) 如果没有“b”字符,文件以文本方式打开。
3) 凡用“r”打开一个文件时,该文件必须已经存在。
#include<stdio.h>
#include<windows.h>
int main()
{
FILE *fp;
printf("-- %d \n",fopen("D:\\demo.txt","rb"));
if((fp=fopen("D:\\demo.txt","rb")== NULL )){
printf("Error on open D:\\demo.txt file!");
getch();//getch的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,
//只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit
exit(1);
}
}
#include<stdio.h>
#include<windows.h>
#define N 5
int main()
{
FILE *fp;
//从键盘输入的数据放入a,从文件读取的数据放入b
int a[N], b[N];
int i, size = sizeof(int);
printf("-- %d \n",fopen("D:\\demo.txt","rb"));
/* if((fp=fopen("D:\\demo.txt","rb")== NULL )){
printf("Error on open D:\\demo.txt file!");
getch();//getch的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,
//只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit
exit(1);
}
*/
if( (fp=fopen("D:\\demo.txt", "rb+")) == NULL ){//要先存在文件
printf("Cannot open file, press any key to exit!\n");
//getch();
//exit(1);
}
//从键盘输入数据 并保存到数组a
/* for(i=0; i<N; i++){
scanf("%d", &a[i]);
}
//将数组a的内容写入到文件
fwrite(a, size, N, fp);
//将文件中的位置指针重新定位到文件开头
rewind(fp);
*/ //从文件读取内容并保存到数组b
fread(b, size, N, fp);
//在屏幕上显示数组b的内容
for(i=0; i<N; i++){
printf("%d ", b[i]);
}
printf("\n");
fclose(fp);
system("PAUSE");
return 0;
}