C语言读写文件操作

目录

一、打开文件

二、读写文件

1、字符的读写

2.字符串的读写

3.数据块的读写

4.格式化读写

三、关闭文件


C语言中对于文件的操作是通过指针来完成的,要注意,件指针不是指向一段内存空间的,它实际上指向的是描述这个文件相关信息的一个文件结构体。

声明文件指针变量的形式为:

FILE *file;

定义好一个文件指针变量后就需要初始化这个文件指针变量或者说是打开文件。

一、打开文件

打开文件通过fopen函数完成,比如

file = fopen("1.txt","r+");

fopen函数中有两个传入参数,第一个参数是文件的名称,比如“1.txt”,要注意,如果这个文件没有和你的程序处于同一目录下,需要写入全部路径,例如   "c:\\1\\1.txt";第二个参数为打开文件的方式,他可以从下面几个方式中打开

文件的打开方式
打开方式含义指定文件不存在时指定文件存在时
r只读方式打开文本文件出错正常打开
w只写方式打开文本文件建立新文件文件原有内容丢失
a追加方式打开文本文件建立新文件在原有内容末尾追加
r+读/写方式打开文本文件出错正常打开
w+读/写方式创建新的文本文件建立新文件文件原有内容丢失
a+读/追加方式建立新的文本文件建立新文件在原有内容末尾追加
rb只读方式打开二进制文件出错正常打开
wb只写方式打开二进制文件建立新文件文件原有内容丢失
ab追加方式打开二进制文件建立新文件在原有内容末尾添加
rb+读/写方式打开二进制文件出错正常打开
wb+读/写方式创建新的二进制文件建立新文件文件原有内容丢失
ab+读/追加方式创建新的二进制文件建立新文件在原有内容末尾追加

因此,在打开文件时,要根据你所需要的格式选择打开方式,比如当你没有文件,想要创建一个文件时可以选择 w+

二、读写文件

C语言中对于文件的读写主要分为五类,

  1. 字符的读写:fgetc()函数和fputc()函数
  2. 字符串的读写:fgets()函数和fputs()函数
  3. 数据块的读写:fread()函数和fwrite()函数
  4. 格式化读写:fscanf()函数和fprintf()函数
  5. 随机读写函数:fseek()、rewind()、ftell()

1、字符的读写

fputc()函数
格式:fputc(c,fp);

功能:用来将一个字符写入到文件中。在格式中fp是已经定义的文件指针变量;c为要写入的字符,可以是字符常量或字符型变量,该函数             是有返回值的。 
返回值:如果执行成功,返回写入的字符;否则,返回EOF,(EOF是C语言编译系统定义的文本文件结束标志,其值为-1,十六进制表                示为0xff,在stdio.h中定义),表示写操作失败。
 

#include "stdio.h"
#include "stdlib.h"

void main()
{
    FILE *file;
    char c = 0;
    

    file = fopen("1.txt","w+");
    if(file == NULL){
        printf("文件打开错误!\n");
        exit(0);
    }

    c = 'A';

    fputc(c,file);
    fputc('\n',file);


    fclose(file);

}

要注意,fputc()函数中传入的第一个参数为字符,而不是字符的地址,第二个变量为文件指针。

上述例程运行完毕后,1.txt文件中内容应该是c与一个换行

c

fgetc()函数

格式: c=fgetc(fp);

功能:用来从指定的文本文件中读取一个字符。其中,fp为文件指针,c为要写入的字符。该函数的功能是从指定的文件中读取一个字符,             并赋值给字符型变量c。 
返回值:读取成功返回读取字符,读取错误或遇到结束标志EOF,返回EOF。

#include "stdio.h"
#include "stdlib.h"

void main()
{
    FILE *file;
    char c = 0;
    
    file = fopen("1.txt","r+");
    if(file == NULL){
        printf("文件打开错误!\n");
        exit(0);
    }

    c = fgetc(file);
    
    printf("文件中读取到的字符为:%c\n",c);


    fclose(file);

}

这样读取到的字符就是在 1.txt文件中存取的第一个字符,如果有一连串字符时,fgetc()函数会自动后移,例如1.txt文件中存有下面这些内容

casdkwuhdkshdkahwudo

那么,在下面这个例程中

#include "stdio.h"
#include "stdlib.h"

void main()
{
    FILE *file;
    char c = 0;
    
    file = fopen("1.txt","r+");
    if(file == NULL){
        printf("文件打开错误!\n");
        exit(0);
    }

    while(c != EOF){
        c = fgetc(file);
        printf("%c",c);
    }


    fclose(file);

}

那么屏幕上将输出

casdkwuhdkshdkahwudo

这是因为file这个文件指针变量会自动记录当前读取或者写入的位置,并且自动后移,因此如果你需要读取了一串字符后,又想回到文件开头进行读取,就需要该边文件指针的位置

2.字符串的读写

fputs()函数
格式:fputs(s,fp);

功能:用来将一个字符串写入指定的文本文件。其中,fp为文件指针,s可以是字符数组名,字符型指针变量或字符串常量。该函数的功能             是将字符串s写入由fp指向的文件中,字符串末尾的‘\0’字符不允写入。

返回值:执行成功,返回所写的最后一个字符;否则,返回EOF。

fgets()函数
格式:fgets(s,n,fp);

功能:用于从指定的文件中读一个字符串到字符数组中。其中,s可以是字符型数组名或字符串指针,n是指定读入的字符个数;fp为文件指             针。n是一个正整数,表示从文件中最多读取n-1个字符,并将字符串指针s定位在读入的字符串首地址。fgets()函数从文件中读取字符直到遇到回车符或EOF为止,函数会在最后一个字符后加上字符串结束标志’\0’;若有EOF,则不予保留。

返回值:该函数如果执行成功,返回读取字符串;如果失败,则返回空指针NULL,这时,s中的内容不确定。
 

fputs()函数和fgets()函数类似于puts和gets函数,可以仿照他们使用。

3.数据块的读写

fread()
格式:fread(char *ps,int len,int n,FILE *fp);

功能:用来指定文件中一次读取由若干个数据项组成的一个数据块,存放到指定的内存缓存区中,数据块的大小取决于数据块中数据项大             小(字节数)和数据项的个数。其中ps是用来指向存放数据块内存缓冲区的首地址,len是用来指出数据块中数据项的大小的整型数,fp是一个指向被操作 文件的指针。 fread()函数一次读取数据块的大小等于len与n的乘积。 

举例:要从fp指针所指向的文件中一次读取500个整数,存放到内存的buf缓存中,可以用下列语句实现这一功能: 

fread(buf,sizeof(int),500,file);

返回值:该函数正常返回值实际读取的数据项数,出错时返回NULL。
fwrite()
格式:fwrite(char *ps,int len,int n,FILE *fp);

功能:fwrite()函数用来将指定的内存缓冲区的数据块内的数据项写入指定的文件中。所写入的数据块的大小是由数据项的大小和数据项个数决定的。其中的参数同fread()函数类似。

返回值:该函数参数与fread()函数返回参数相同,函数正常返回值是实际写入文件中的数据项个数。

 

fread()和fwrite()函数一般用于二进制文件的操作。

4.格式化读写

fprintf()函数
格式:fprintf(fp, format, arg1, arg2,….,argn);

功能:fprintf()用来将输出项按指定的格式写入指定的文本文件中,其中格式化规定与printf()函数功能相似,所不同的只是fprintf()函数是将输出的内容写入文件中,而printf()函数则是在屏幕输出。其中,fp为文件指针,format为指定的格式控制字符串;arg1~argn为输出项,可以是字符、 字符串或各种类型的数值。该函数的功能是按格式控制字符串format给定的格式,将输出项arg1,arg2,…..,argn的值写入fp所指向的文件中。

返回值:如果函数执行成功,返回实际写入文件的字符个数;若出现错误,返回负数。
 

其实,fprintf()函数与printf函数一样的用法,只是在前面增加了一个发fp参数,即需要传入文件指针,printf是把字符按照格式打印到屏幕上,而fprintf是按照格式打印到文本中。

#include "stdio.h"
#include "stdlib.h"

void main()
{
    FILE *file;

    
    file = fopen("1.txt","r+");
    if(file == NULL){
        printf("文件打开错误!\n");
        exit(0);
    }

    fprintf(file,"姓名   成绩   班级\n");
    fprintf(file,"张三   78     1\n");
    fprintf(file,"李四   88     2\n");


    fclose(file);

}

那么在文本文件中会是

姓名  成绩  班级
张三  78    1
李四  88    2

fscanf()函数
格式:fscanf(fp,format,arg1,arg2,…..,argn);

功能:fscanf()用来按规定的格式从指定的文本文件中读取数据。它与scanf()函数的功能相似,都是按规定的格式读数据的函数,只是fscanf()函数读的对象不是键盘区,而是文件。其中,fp为文件指针,format为指定的格式控制字符串;arg1~argn为输入项的地址。该函数的功能是从文件指针fp所指的文本文件中读取数据,按格式控制字符串format给定的格式赋予输入项arg1,arg2,…..,argn中。

返回值:如果该函数执行成功,返回读取项目个数;如果遇到文件末尾,返回EOF;如果赋值失败,返回0.
 

例如,1.txt文件中存有下面内容

123 45 56

那么使用fscanf读取时

int i = 0;
fscanf(file,"%d",i);

那么i读到的值就是123

三、关闭文件

在程序里面,如果我们打开一个文件后,在完成文件的操作后一定要将其关闭,防止产生其他破坏性的操作,可以用fclose关闭

fclose(file);

 

 

  • 75
    点赞
  • 420
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值