一、打开和关闭文件流
1、打开文件流fopen
FILE * fopen (const char *path, const char *mode);
参数1:文件名(可包含文件路径)
参数2:打开方式
返回值:打开成功返回文件流指针,失败则返回NULL
-r :以只读的方式打开文件,文件不存在,则出错
r+ :以读写方式打开文件,文件不存在,则出错
-w :以只写方式打开文件,文件不存在,则新建,文件存在则清空文件中的内容
w+ :以读写方式打开
-a :以追加方式打开文件,文件不存在,则新建,文件存在则追加到文件末尾
a+ :以读写方式
#include <stdio.h>
int main(int argc, const char *argv[])
{
char ch='\0';
printf("请输入一个字符\n");
ch=getchar();//从键盘输入一个字符
printf("ch=%c\n",ch);
FILE *fp=NULL;//打开文件 (文件是否存在,需要创建还得创建)
//参数1:文件名
//参数2:打开方式
//返回值:成功返回文件流指针,失败返回NULL
fp=fopen("1.txt","r");//以只读方式查看文件
if( NULL==fp)
{
printf("open eror");
return -1;
}
printf("file open success\n");
fclose(fp);//关闭打开的流
return 0;
}
2、关闭文件流fclose
3、按字符读写文件
1、按字符读写文件
(1)fputc()
#include <stdio.h>
//从命令行输入写入内容的文件
int main(int argc, const char *argv[])
{
if(argc<2)
{
printf("please input appname filename\n");
return -1;
}
char ch='\0';
FILE *fp=NULL;
fp=fopen(argv[1],"w");
if(NULL==fp)
{
perror("file open error");
return -1;
}
while(1)
{
if(ch=='\n') break;
ch=getchar();
fputc(ch,fp);
}
fclose(fp);
return 0;
}
(2)fgetc()
模仿cat 命令
#include <stdio.h>
int main(int argc, const char *argv[])
{
if(argc<2)
{
printf("please input appname filename\n");
return -1;
}
char ch='\0';
FILE *fp=NULL;
fp=fopen(argv[1],"r");
if(NULL==fp)
{
perror("file open error");
return -1;
}
while(1)
{
ch=fgetc(fp);
if(EOF==ch)break;
printf("%c",ch);
}
fclose(fp);
return 0;
}
模仿cp 命令
#include <stdio.h>
int main(int argc, const char *argv[])
{
if(argc<3)
{
printf("please input appname filename cpname\n");
return -1;
}
char ch='\0';
FILE *fr=NULL;
FILE *fw=NULL;
fr=fopen(argv[1],"r");
fw=fopen(argv[2],"w");
if(NULL==fr && NULL==fw)
{
perror("file open error");
return -1;
}
while(1)
{
ch=fgetc(fr);
if(EOF==ch) break;
fputc(ch,fw);
}
fclose(fr);
fclose(fw);
return 0;
}
结果:
(3)char *fgets(char *s,int size,FILE *stream)
参数1:缓冲区的首地址
参数2:读取的字节数
参数3:文件流指针
#include <stdio.h>
int main(int argc, const char *argv[])
{
if(argc<2)
{
printf("please input appname filename\n");
return -1;
}
FILE *fp=NULL;
fp=fopen(argv[1],"r");
if(NULL==fp)
{
perror("file open error");
return -1;
}
char arr[20]={'\0'};//创建一个缓冲区
fgets(arr,sizeof(arr),fp);//按行从文件中读取
printf("%s",arr);
printf("%d\n",strlen(arr));
fclose(fp);
return 0;
}
注意:
1)遇到'\n'结束,'\n' 也读进了缓冲区
2)读取SIZE-1结束
(4)int fputs(const char *s,FILE *stream)
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
if(argc<2)
{
printf("please input appname filename\n");
return -1;
}
FILE *fp=NULL;
fp=fopen(argv[1],"r");
if(NULL==fp)
{
perror("file open error");
return -1;
}
char arr[20]={'\0'};
while(1)
{
memset(arr,'\0',sizeof(arr));
//fgets(arr,fp);
fgets(arr,sizeof(arr),stdin);//标准输入stdio 标准输出 stdout 标准出错 stderr
if(strncmp(arr,"exit",4)==0)
{
break;
}
fputs(arr,fp);
}
fclose(fp);
return 0;
}
结果: