C语言fopen()函数
C语言文件打开函数,函数声明在头文件 stdio.h中
函数定义:
1
2
3
4
_ACRTIMP FILE* __cdecl fopen(
_In_z_ char const* _FileName,
_In_z_ char const* _Mode
);
参数 _fileName:指向需要打开文件的文件指针
第一个参数可以理解成待打开文件的名称,更确切的说是包含文件名的字符串地址。
参数 _Mode: 打开文件的模式
C提供的模式包括以下:
文本模式:
"s":以读的方式打开文件
"w":以写的方式打开文件,把现有的文件长度截为0,如果文件不存在则创建一个文件,这个文件创建的位置应该是工程的文件夹下
"a":以写的方式打开文件,在现有文件后面添加内容,如文件不存在则会创建一个新的文件。
"r+":以更新模式打开文件(即可以读写文件)
"w+":以更新模式打开文件(可以读写),如果文件存在,则将文件长度截为0,如果文件不存在则创建一个新文件
"a+":以更新模式打开文件(可以读写),在现有文件的末尾添加内容,如果文件不存在,则创建一个新文件;可以读整个文件,但是只能从末尾添加内容。
二进制模式:
"rb","wb","ab","rb+","r+b","wb+","w+b","ab+","a+b":与上一个模式类似类似,但是是以二进制模式打开文件而不是文本模式打开文件
C11新增特性:
"wx","wbx","w+x","wb+x"或"w+bx":新的C11新增了带x字母的写模式,与之前的写模式相比具有更多的特性。第一,如果以传统的一种写模式打开现有的一个文件,fopen()会把该文件长度截为0,这样就失去了该文件的内容。使用带x字母的写模式,即使fopen()操作失败,源文件的内容也不会被删除。第二,如果环境允许,x模式的独占性使得其他程序或现成无法访问正在被打开的文件。
getc()和putc()函数
getc(),putc()与getchar(),putchar()函数类似,不同点在于getc()和putc()函数的参数是指定使用哪个文件,其中getc()返回值是返回获取到指定文件的一个字符!,如果在读取文件时候发现已经是文件结尾,他将返回一个特殊值:“EOF”,可以通过判断这个值来判断文件是否结尾或者是否为空文件。
举例:
step1:程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
int ch; //用于存放获取到的字符
FILE* fp; //文件指针
fp = fopen("test.txt","r"); //以读的方式打开fp指向“test.txt”文件
ch = getc(fp); //从指定文件中获取一个字符
while (ch!=EOF) //判断是否为空文件
{
putchar(ch); //打印输出获取到的一个字符
ch = getc(fp); //获取下一个字符
}
return 0;
}
代码是在VS2019中编译的,使用fopen()如果出现报错的话可以增加一个宏定义:#define _CRT_SECURE_NO_WARNINGS以消除报错,除此之外程序编译后Win平台需要在命令提示窗口运行(CMD)
step2:
VS2019编译后的EXE文件存放在工程文件夹下面的Debug文件夹下,访问文件需要在同一个文件夹中,所以我们在Debug文件夹下创建一个“test。txt”文件,并且在文件中输入“hello word”
运行结果
可能错误
如果出现CMD界面下运行错误,可能原因是文件与EXE文件不在同一个文件夹内!