十一章——3 文件 函数

打开文件fopen

函数的声明:

FILE *fopen(const char *path,const char *mode);

path:路径。mode:模式

函数说明:fopen函数的共嗯是打开一个已经存在的文件,并返回这个文件的文件指针,或者创建一个文件,并打开此文件,然后返回文件的标识

函数的参数:

   参数1:打开的文件的路径

          A 绝对路径,即从根目录开始的路径名称。“例D:\\demo\\test\\aaa.txt”

                   在windows下的话,根目录就是指C盘D盘E盘等

          B 相对路径   .\\test\\aaa.txt

                      点.是当前文件的意思,从当前文件开始

参数2:文件打开的方式,即以什么样的方式打开文件(只读,只写,可读可写等等)

第二个参数的几种形式

读写权限:r,w,a,+

     r:以只读的方式打开文件,文件不存在则返回NULL,文件存在且打开成功则返回文件指针进行后续的读操作

     例1:FILE *fp

              fp=fopen("test.txt","r");

    w:以只写方式打开文件

       1、文件不存在,以指定文件文件名创建此文件,并且打开文件,但是不一定成功

       2、若文件存在,清空文件内容,打开文件,然后进行写操作,但是也不一定成功

       3、如果文件打不开(比如文件只读),返回NULL

例  FILE *fp

     fp=fopen("test.txt","w");

   a:以追加方式打开文件

       1、文件不存在,以指定文件名创建此文件(同w)

       2、若文件存在,从文件的结尾处进行操作(即读写)

说明:如果不加a的话打开文件的时候读写位置在文件的开始,对文件进行读写的时候就是从文件开始进行读写的。加上a,打开已经存在的文件,读写位置在文件的末尾

    +:同时以读写打开指定文件

 

 

 上图的b都是指以二进制形式打开

 返回值

    成功:打开的文件对应的文件指针

    失败:返回NULL

以后调用fopen的时候,要判断打开是否成功

关闭文件fclose

函数的头文件:

#include<stdio.h>

函数的声明:int fclose(FILE *fp);

函数的说明:关闭fp所代表的文件,注意一个文件只能关闭一次,不能多次关闭。关闭之后就不能再对文件指针进行读写等操作了

返回值:成功返回0,失败返回非0

 #include<stdio.h>
int main()
{
    FILE* fp1;
    int ret;
    fp1 = fopen(".\\test.txt", "r+");
    if (fp1 == NULL) {
        printf("fopen失败");
        return 0;
    }
    printf("打开文件test,txt成功\n");

    ret = fclose(fp1);
    if (ret == 0) {
        printf("关闭文件成功");
    }
    else {
        printf("关闭文件失败");
    }

    return 0;
}

  一次读写一个字符

 函数声明:int fgetc(FILE *stream)

 函数声明:fgetc从stream所标识的文件中读取一个字节,将字节值返回

 返回值:以t的方式,读到文件结尾返回EOF

              以b(以二进制)的方式,读到文件结尾,使用feof(文件指针)判断结尾

             feof是C语言标准库函数,其功能是检测文件流上的文件结束符,如果文件结束则返回非0               值,否则返回0

函数声明int fputc(int c,FILE *stream)

函数的说明fputc将c的值写到stream所代表的文件中

返回值:如果输出成功,则返回输出的字节值;如果输出失败,则返回一个EOF

例题:文件内容的复制代码

#include<stdio.h>
int main()
{
    FILE* fp1, * fp2;
    char ch;
    fp1 = fopen("test.txt", "r");
    if (fp1 == NULL) {
        perror("fopen");//perror的作用是打印出错原因
        return 0;
    }

    fp2 = fopen("test2.txt", "w");
    if (fp2 == NULL) {
        perror("fopen");
        return 0;
    }

    while ((ch = fgetc(fp1)) != EOF) {
        fputc(ch, fp2);
    }//进行复制,只要ch不等于EOF

    fclose(fp1);
    fclose(fp2);
    return 0;
}

一次读写一个字符串

char *fgets(char *s,int size,FILE *stream);

      从stream所代表的文件中读取字符,在读取的时候碰到换行符或者是碰到文件的末尾停止读取,或者是读取了size-1个字节停止读取,在读取的内容后面回家一个\0;

   返回值:成功返回目的数组的首地址,即s;失败返回NULL;

int fputs(const char *s,FILE *stream);

函数功能:将s指向的字符串,写道stream所代表的文件中

返回值:成功返回写入的字节数,失败返回-1

例题

#include<stdio.h>
int main()
{
    FILE* fp_read, * fp_wirte;
    char str[100];
    fp_read = fopen("src.txt", "r");
    if (fp_read == NULL) {
        perror("fopen");
        return 0;
    }
    fp_wirte = fopen("dest.txt", "w");
    if (fp_wirte == NULL) {
        perror("fopen");
        return 0;
    }
    fgets(str, 6, fp_read);
    printf("str=%s\n", str);
    fputs(str, fp_wirte);
    return 0;
}

 读写文件fread

读文件函数说明:size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);

函数的说明:fread函数从stream所标识的文件中读取数据,每块是size个字节,共nmemb块,存        放到ptr指向的内存里

返回值:实际读到的块数

 

写文件函数说明:size_t fwirte(void *ptr,size_t size,size_t nmemb,FILE *stream);

函数的说明:fread函数从stream所标识的文件中读取数据,每块是size个字节,共nmemb块,存        放到ptr指向的内存里

返回值:实际读到的块数

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值