#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
//fp=fopen(argv[1],"w");
fp=fopen("yaoyang.txt","w");
fprintf(fp,"yaoyang\t%d\n",10);
fclose(fp);
return 0;
}
若没有该文件,系统会自动创建该文件。
fp是文件指针,char 类型。
FILE是结构体,FILE*是结构体指针,typedef定义的FILE.
打开文件操作时,就已经打开了三个文件。stdin,stdout,stderr
FILE *fopen(const char *path,const char *mode)
两个参数:第一个为路径(相对路径,绝对路径),传参char *即为字符串
第二个mode类型(文件读取权限):
六种权限
r:读,打开文件,读写指针位置,在文件开头
w:写,打开文件,如果文件不存在,创建文件,若文件存在,截断原文件,读写指针在文件开头。
a:追加写打开文件,如果文件不存在,创建文件。如果存在,在文件末尾继续写文件。
r+:可读可写打开文件,如果文件不存在,也不创建。存在也不截断。
w+:可读可写打开文件,如果文件不存在,则创建文件。如果存在,则截断。
a+:可读可写追加打开文件。如果文件不存在,则创建。
除了w,w+,其他都为追加。并不清空。
截断定义的代码演示:
#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
fp=fopen("yaoyang.txt","w");
fclose(fp);
return 0;
}
【除了w,w+会产生截断,其他都不会。】
w,且文件存在。就进行截断,截断之后,文件内容清空。
从文件中按行读取数据
#include <stdio.h>
int main(void )
{
char buf[1024];
FILE *fp;
fp=fopen("hellotest.txt","r");
if(fp==NULL)
{
printf("open file err\n");
return -1;
}
fgets(buf,1024,fp);
printf("%s",buf);
//第二种写法: printf("%s",fgets(buf,sizeof(buf),fp));
//因为fgets返回的是
fclose(fp);
return 0;
}
fgets函数功能为从指定的流中读取数据,每次读取一行。其原型为:char *fgets(char *str, int n, FILE *stream);从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
简而言之,从stream所指的文件里读取数据,存入str中,每次存入的最大值为n-1(因为包含/0,这个字节)
读取整个文件:
#include <stdio.h>
int main(void )
{
char buf[1024];
FILE *fp;
fp=fopen("hellotest.txt","r");
if(fp==NULL)
{
printf("open file err\n");
return -1;
}
while(fgets(buf,1024,fp)!=NULL)
printf("%s",buf);
fclose(fp);
return 0;
}
文件的拷贝:
#include <stdio.h>
//cp src dest
int main(int argc,char *argv[])
{
FILE *dest,*src;
char buf[4096];
src=fopen("hellotest.txt","r");
dest=fopen("hello.txt","w");
if(src==NULL||dest==NULL)
{
printf("open file err\n");
return -1;
}
将src文件拷贝至dest文件。
while(fgets(buf,sizeof(buf),src)!=NULL)
fputs(buf,dest);
fclose(src);
fclose(dest);
return 0;
}