1.fopen函数
FILE *fopen(const char *path, const char *mode);
Fopen打开文件成功,返回有效FILE的有效地址,失败返回NULL
Path就是指定打开文件的路径,可以是相对路径,也可以是绝对路径,mode有以下几个值:
r 以只读方式打开文件,该文件必须存在,文件必须是可读的。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
只要成功用fopen打开的文件,使用完毕后一定要用fclose关闭。fclose的参数就是fopen的返回值
2.getc函数&putc函数
int getc(FILE *stream);
getc的参数是fopen成功打开文件后返回的指针,getc的返回值是一个char
getc的功能是以字节位单位读取文件内容
文本文件的最后结束标示是-1,也就是一个宏EOF
#define EOF -1
#include<stdio.h>
int main()
{
char a[]="/home/liu/1/a.tet";
FILE *p=fopen(a,"r");
if (p)
{
while(1)//循环输出文本的值
{
char c=getc(p);
if(c=EOF)
break;
print("%c",c);//此时输出a.txt的第一个字节
//char c=getc(p);//此时再输出会输出a.txt的第二个字节
fclose(p);
//char c=0
//while(c!=EOF)
//{c=getc(p);printf("%c");}//此时的问题在于会把-1输出。可以把printf和c=get(p)调整位置避免此问题
}
else
{
printf("fail\n");//这里不需要调用fclose
}
return 0;
}
下面看看putc函数吧
#include<stdio.h>
int main()
{
FILE *p=fopen("./a.txt","w");
if(p)
{
putc('a',p);
putc('\n',p);//向文件中写入一个字符
fclose(p);
}
return 0;
}
getc必须用r模式打开,putc必须用w模式打开。
int putc(int c, FILE *stream);第一个参数是要写入的char,第二个参数是fopen返回的文件指针
EOF与feof函数文件结尾
程序怎么才能知道是否已经到达文件结尾了呢?EOF代表文件结尾
如果已经是文件尾,feof函数返回true。
int feof(FILE *stream);,参数就是fopen返回的文件指针
EOF不属于文件的内容,只是文件的结尾标示,而且也不要直接用-1来代替EOF。
只有文本文件才能通过EOF判断文件的结尾标示,对于二进制文件EOF是无效的
通过getc,putc读写指定文件
#include<stdio.h>
int main(int argc,char **args)
{
if(argc<2)
return 0;
FILE *p=fopen(args[1],"w");
if(p)
{
while(1)
{
char c =getchar();//从标准输入设备读取一个字符
if(c=='0')
break;
putc(c,p);
}
fclose(p);
}
}
int main(int argc,char **args)
{
if (argc<2)
return 0;
FILE *p=fopen(args[1],"r");
if(p)
{
char c=getc(p);
while(c!=EOF)
{
printf("%c",c);
c=getc(p);
}
fclose(p);
}
return 0;
}
拷贝文件及加密解密的代码
#include<stdio.h>
int main(int argc,char **args)
//命令行有三个参数,第一个是源文件,第二个是目标文件,第三个0代表加密,1代表解密
{
if (argc<4)
return -1;
FILE *p=fopen(args[1],"r");
FILE *p1=fopen(args[<