C语言文件读取

 

 

#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;
}
 

发布了38 篇原创文章 · 获赞 3 · 访问量 3523

猜你喜欢

转载自blog.csdn.net/qq_38436175/article/details/104065997
今日推荐