文件操作小结(C语言版)

【C语言】文件操作(超详细) 文件详解(超详细!!!) 阅读详情
1.文件打开——fopen()
   原型:FILE * fopen(const char*filename, const char*mode);
   功能:打开以filename所指向的字符串为文件名的文件,使之与一个流关联。
   返回值:打开成功,返回一个指向FILE类型结构变量,即文件指针,否则返回NULL
   所在头文件:stdio.h
   实例:
    FILE * fptr;
    if(fptr=fopen("client.dat","r+")==NULL)
       printf("File could not be opened.\n");
    else
    {  
          //相关的文件操作。
     }

    注意:  从ASCII文件读取数据到内存时,系统自动将回车换行符转换成一个换行符;在输出内存数据到ASCII文件时,将换行符转换成回车和换行两个字符。\n:回车换行,0D:回车, 0A:换行

2.文件打开的方式:

    r —— 文件必须存在,以只读的方式打开一个ASCII文件

    w —— 如果文件存在,以只写的方式打开一个ASCII文件,原文件内容全部删除;如果文件不存在,则新建。

    a —— 如果文件存在,则打开一个把数据追加到ASCII文件末尾;如果文件不存在,则新建。

    r+ —— 文件必须存在,以即可读又可写(更新数据)的方式打开一个ASCII文件。

    w+ —— 如果文件存在,以即可读又可写(更新数据)的方式打开一个ASCII文件,原文件内容全部删除;如果文件不存在,则新建。

    a+ ——  如果文件存在,则以即可读又可写打开一个把数据追加到ASCII文件末尾;如果文件不存在,则新建。

   rb/wb/ab/r+b/w+b/a+b —— 对二进制文件的操作,其含义同ASCII文件操作。 

3.文件关闭——fclose()
   原型:int fclose(FILE * stream);
   功能:关闭文件指针stream所指向的文件,将所有未回写缓冲的数据写入文件,断开文件和流的关联,释放文件占用的资源,如缓冲区,FILE类型记录占用的内存等。
   返回值:如果正常关闭文件则返回0,否则返回EOF。
   所在头文件:stdio.h
   实例:

   fclose(fptr);



3.文件定位
    所在头文件:stdio.h
(1)位置指针复位函数——rewind()
    原型:void rewind(FILE*stream);
    功能:把文件位置指针重新定位到文件起始位置(即0字节处)
    返回值:无
(2)随机读写文件——fseek()
    原型:int fseek(FILE*stream, 位移量, 参照点);
    功能:将指定文件的位置指针,从参照点开始,移动指定的位移量
              i)参照点:SEEK_SET 值为0,表示文件头;SEEK_CUR 值为1,表示当前位置;
                             SEEK_END 值为2,表示文件尾。
              ii)位移量:以参照点为起点,向前(位移量>0)或向后(位移量<0)移动的字节数。
    实例:
     fseek(fptr,10,SEEK_SET); //从文件头(0字节处)向后移动10字节(10字节处)
(3)返回文件当前位置的函数——ftell()    
    原型:long  ftell(FILE *stream);    
    功能:返回文件位置指针的当前位置
    返回:返回文件位置指针的当前位置,即用相对于文件头的位移量表示。如果返回值为-1L,则表明调用出错。
    实例:
      offset=ftell(fp);
          
      if(offset= =-1L)
               
         printf(“ftell() error\n”);
      else
     {  
          //相关的文件操作。
      }


4.文件的读写操作

   所在头文件:stdio.h

(1)将一个字符写入指定文件——fputc()
    原型:int fputc(int c, FILE *stream)
    功能:将c所指定字符写入stream所指向的输出流中,文件位置指针向前移动一个字节。
    返回值:返回输出的字符数据;否则,返回一个符号常量EOF(其值在stdio.h中定义为-1)
    实例:
     fputc('A', fptr);  //在fptr处写入'A',文件位置指针后移1个字节
     fputc(c,stdout);  //定价于putchar(c);
(2)从指定文件读取一个字符——fgetc()
    原型:char fgetc(FILE * stream);
    功能:从stream所指向的输入流获取下一个unsigned char类型的字符并转换成int类型,同时将文件位置指针向前移动1个字节。
    返回值:返回读取的字符,如果到文件尾,设置该流的文件结束指示符并返回EOF;读错则设置该流的错误指示符并返回EOF。
    实例:
     ch=fgetc(fptr);  //从fptr读取一字符到ch中,同时将fptr的文件位置指针向前移动到下一个字符
     c=fgetc(stdin);  //定价于c=getchar();
(3)向文本文件输出一个字符串——fputs()
    原型:int fputs(const char* s, FILE *stream);
    功能:将s所指向的字符串写入stream所指向的流中(‘\0’不被写入)。同时将文件位置指针向前移动字符串长度个字节,指向下一写入位置。
    返回值:如果发生写错误,则函数返回EOF;否则,返回一个非负值。
    实例:
     fputs("Hello world!", fptr); //在当前文件指针位置写入Hello world!
     fputs(s, stdout);  //定价于puts(s);
(4)从文本文件读一个字符串——fgets()
    原型:char * fgets(char * s, int n, FILE *stream);

    功能:从stream指向的流中读取最多n-1个字符并放到s所指向的数组中,遇到下面情况不再往后读:

               i)读到新行符‘\n’或者文件结束符,但写入s所指向的数组中;

               ii)或虽未遇新行符和文件结束符、但已读入n-1个字符。最后一个字符读入数组后接着写入结束标志‘\0’ ,并将文件位置指针向前移动n-1(字符串长度)个字节。

              如果遇到文件结束符并且没有字符读入数组,则数组内容不变。键盘输入时,以CTRL+Z作为结束字符。
    返回值:如果成功返回值等于获得的字符串的首地址。 如果出错,或者读到FILE的结尾,返回NULL.
    实例:
     char s[100];
     fgets(s,100,fptr);   //假设文件足够长,实际上s中只有99个字符,最后一个位置为结束标志'\0' 
     fgets(s,sizeof(s),stdin);  //定价于gets(s);
(5)对文件格式化读——fscanf()
     原型:int fscanf(FILE * stream, const char * format, 输入变量首地址表)
     功能:函数从stream指向的标准输入流中读取字符序列,按照format中的格式规格说明对字符序列进行解释,并把结果存储在变量中。从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
     返回值:当能正常读入数据时, fscanf 返回读入数据的个数,否则返回 EOF 。
     实例:
      fscanf(fptr, "%d,%f", &i,&f);
      fscanf(stdin, "%d,%f", &i,&f);  //等价于scanf("%d,%f", &i,&f);
(6)对文件格式化写——fprintf()
     原型:int fprintf(FILE * stream, const char * format,输出参量表);
     功能:函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. 
     返回值: fprintf()的返回值是输出的字符数,发生错误时返回一个EOF.
     实例:
      int i = 3;  float f = 9.80;

      fprintf(fptr, "%2d, %6.2f", i, f);    //将变量i按%2d格式、变量f按%6.2f格式, 以逗号作分隔符,输出到fPtr所指向的文件中:□3,□□9.80(□表示1个空格)

     fprintf(stdout, "%2d, %6.2f", i, f);   //等价于printf("%2d, %6.2f", i, f);

(7)在二进制文件读一数据块——fread()
     原型:int fread(void * buffer, int size, int count, FILE * stream);
     功能:从stream所指向的流中读取数据到buffer所指向的数组中, size表示单个数组元素的大小,最多读取count个数组元素,流的文件位置指针根据成功写入的字节数递增。
     返回值: 函数返回成功读入的元素个数。如果发生读错误,则返回值可能小于count。
     实例:
      struct student stu[3], astu;
      fread(stu, sizeof(struct student), 3, fptr);   // 从文件读取3条记录写入数组stu中
      fread(astu, sizeof(struct student), 1, fptr);  //一条记录写入结构变量aStu中
      fread(&ch, sizeof(char), 1, fptr);  //读取一个字节写入字符变量ch中
(8)在二进制文件写一数据块——fwrite()
     原型:int fwirte(void * buffer, int size, int count, FILE * stream)
     功能:将buffer所指向的数组内容写入stream所指向的流中。size表示单个数组元素大小,最多写入count个数组元素,流的文件位置指针根据成功写入的字节数递增。
     返回值:函数返回成功写入的元素个数,如果遇到错误,返回值可能小于count
     实例:
      struct student stu[3], astu;
      fwrite(stu, sizeof(struct student), 3, fptr);  //把数组stu中所有元素一次性写入文件
      fwrite(&astu, sizeof(struct student), 1, fptr);  //把变量astu中的内容写入文件

      fweite(ch, sizeof(ch), 1, fptr);  //把字符变量写入文件



    5.判断文件是否读到文件尾
(1)ASCII码文件:在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)。(见fgetc(), fgets()定义)   
    实例:
      ch=fgetc(stdin);
      while(ch!=EOF)
     {
          fputc(ch,fptr);
          ch=fgetc(stdin);
      }
(2)判断是否读到文件末尾——feof()
    原型:int feof(FILE * stream);
    功能:判断文件是否读到文件尾,适用于ASCII码文件和二进制文件
    返回值:如果到文件尾,则返回1;否则返回0.
    实例:
     FILE * sfptr = NULL, dfptr = NULL;
     if((sfptr=fopen("input.txt","r"))!=NULL)
     {
        if((dfptr=fopen("output.txt","w"))!=NULL)
          {
             ch = fgetc(sfptr); //从input.txt文件读取一个字符
             while(!feof(sfptr)) //逐字符复制
            {
                 fputc(ch, dfptr);
                 ch = fgetc(sfptr);
            }
            fclose(dfptr);
          }
          fclose(sfptr);
     }
 注意:feof(fptr)!=EOF是无法判断是否读到 文件末尾的!是错误的写法。 
ADS 2024 Circuit Envelope 仿真:3步配置调制源,分析5G NR EVM与ACPR 本文详细介绍了ADS 2024 Circuit Envelope仿真技术在5G NR调制源配置与关键指标分析中的应用。通过3步配置调制源,工程师可以高效评估EVM与ACPR等关键指标,特别适用于功放设计中的非线性效应诊断。文章还提供了优化仿真设置和精确提取EVM、ACPR的实用方法,助力5G射频前端设计。 阅读详情

相关推荐

PSIM+PIL+CCS三剑客:手把手教你搞定DSP28335的软硬件联合调试

本文详细介绍了如何利用PSIM、PIL与CCS三款工具,实现DSP28335的软硬件联合调试。通过搭建兼容环境、从PSIM仿真生成PIL代码,再到实战联合调试与问题诊断,手把手指导开发者构建从虚拟模型到实际硬件的完整验证闭环,有效提升电力电子与电机驱动等领域的开发效率与可靠性。

weixin_29183637的博客 186

两个简单的程序了解fputc(int ch,FILE *fp)和fgetc(FILE *fp)的用法

fputc(int ch,FILE *fp)和fgetc(FILE *fp)的用法 区别 fputc(int ch,FILE *fp)函数 fgetc(FILE *fp)函数 功能 将一个字符写入到文件中 从制定文件中读出一个字符 参数 ch 要写入的字符,fp 指向FILE结构的指针 fp 指向FILE结构的指针 返回值 成功...

斑驳的岁月 1万+

Alibaba Java Coding Guidelines,以后我的Java代码规范,就靠它了

前言 对于Java代码规范,业界有统一的标准,不少公司对此都有一定的要求。但是即便如此,庞大的Java使用者由于经验很水平的限制,未必有规范编码的意识,而且即便经验丰富的老Java 程序员也无法做到时刻将规范牢记于心。所以对于代码规范扫描工具,一经问世就广受青睐,阿里巴巴出品的Alibaba Java Coding Guidelines(阿里巴巴Java代码规约扫描,以下简称为AJCG)插件便是其...

java梦工厂 859

c语言文件操作小结,文件操作小结(C语言版)

1.文件打开——fopen()原型:FILE * fopen(const char*filename, const char*mode);功能:打开以filename所指向的字符串为文件名的文件,使之与一个流关联。返回值:打开成功,返回一个指向FILE类型结构变量,即文件指针,否则返回NULL所在头文件:stdio.h实例:FILE * fptr;if(fptr=fopen("client.dat...

weixin_29335033的博客 326

告别BAPI!深入SAP S/4HANA BP框架:cl_md_bp_maintain维护客户主数据的正确姿势与性能优化

本文深入解析SAP S/4HANA中cl_md_bp_maintain框架的高效实践与架构设计,对比传统BAPI方式,展示其在业务伙伴(BP)主数据维护中的性能优势与现代化特性。通过详细代码示例和性能测试数据,揭示如何利用该框架实现批量处理、集中校验及智能错误恢复,助力企业从ECC向S/4HANA平滑迁移。

weixin_30596735的博客 358

linux和mac安装+配置circos(

一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。

xiufan1的博客 551

C/C++对文件操作小结

文件的基本概率 从文件编码的方式来看,文件可分为二进制码文件和ASCII码文件两种。      二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示, 但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。 输入输出字符流的开始和结束只由程序控

海阔天空的专栏 1454

零基础玩转IndexTTS2:5分钟搭建个人语音克隆工具(支持B站同款情感语音)

本文详细介绍了如何零基础使用IndexTTS2快速搭建个人语音克隆工具,支持B站同款情感语音。IndexTTS2作为自回归零样本TTS系统,突破传统技术限制,实现精准时长控制和丰富情感表达。通过HuggingFace在线演示,用户可轻松克隆音色并调节情感参数,适用于自媒体配音、有声书朗读等场景。

purple的博客 918

文件操作小结

转载自:http://club.topsage.com/thread-2226662-1-1.html   文件操作 在编程的过程中,文件的操作是一个经常用到的问题,在VC++中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1、基于C的文件操作;2、基于C++的文件操作;3、基于WINAPI的文件操作;4、基于MFC库的文件操作。5、Unix\Linux文件操

YanMY2012的专栏(若有侵犯,请您指出,我会删档) 1288

LightTools宏 vs Python API:光学仿真自动化方案选型指南

本文深入对比了LightTools光学仿真自动化中VBA宏与Python API两种方案。VBA宏内嵌易用,适合固定流程批处理;Python API生态强大,尤其在参数优化算法集成方面优势显著,便于构建复杂工作流。文章结合案例,为不同场景下的技术选型提供清晰指南。

garlic的博客 940

R语言机器学习算法实战系列(十三)随机森林生存分析构建预后模型 (Random Survival Forest)

本教程运用随机森林生存分析筛选与患者生存状态显著相关特征。该方法借随机森林这一强大机器学习算法,构建多棵决策树并集成结果,以提高生存分析准确性,识别关键生物标志物。接着,利用选定特征构建风险得分,将多个特征转化为单一数值,量化患者风险水平。之后,依据风险得分将患者分为高、低风险亚型,为临床治疗提供个性化指导。最后,通过分析时间依赖的 ROC 曲线评估模型长期预测能力。此曲线计算不同阈值下的真正例率与假正例率,在多个时间点评估,全面展现模型长期稳定性与准确性。

专注生信领域 2022

C语言中对文件操作的小结

在C语言中,文件的操作是通过FILE结构体进行了,具体实现时,先利用fopen返回一个指向FILE结构体的指针: FILE *fopen( const char *filename, const char *mode ); filename:文件名,mode:打开的模式,规定了是可读、可写、追加之类的属性。 "r":可读,如果文件不存在,fopen调用失败 "w":可写,如果文件存在,那么

thefutureisour的专栏 1万+

基于simulink的能量管理策略的场景实例:混合动力电动汽车(HEV)的能量回收与分配策略

本文以混合动力电动汽车(HEV)为研究对象,通过Simulink建模详细演示了能量管理策略的设计与实现。内容涵盖HEV系统架构、核心组件工作原理,并分步骤指导搭建车辆动力学模型、动力系统组件模型和基于规则的能量管理策略。重点分析了制动能量回收与功率分配机制,通过仿真验证了逻辑门限策略在提升燃油经济性和维持电池SOC平衡方面的有效性。文章最后展望了更高级控制策略的应用前景,为HEV能量优化提供了完整的仿真研究框架。

xiaoheshang_123的博客 213

c语言的文件操作小结

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及当前的位置等)。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。而是应用于当文件读取结束的时候,判断是读取失败结束,还是读到文件尾结束。接下来就可以通过文件指针来关联相应的文件了,对文件进行操作了。...

south_windOvO的博客 719

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C语言】文件操作小结

C语言文件操作小结

icemelody5316的专栏 709

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C/C++对文件操作的小结

在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O 文件操作,下面就 分别介绍之。 一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE 在stdio.h中定义如下: typedef struct { int level; unsigned flags; char fd; unsigned char hold; int bsize; uns

wfziyou的专栏 1364

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C语言-文件操作 小结

小结

hangweijie的博客 204

C对文件操作的小结

在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O 文件操作,下面就分别介绍之。一、流式文件操作这种方式的文件操作有一个重要的结构FILE,FILE 在stdio.h中定义如下:typedef struct {int level; /* fill/empty level of buffer */unsigned flags; /* File status flags */cha

Welcome Friends~ 1558

【C语言】文件操作

文件操作基本详情

m0_56797675的博客 428

Linux C 文件操作及小结

1、文件创建 -- creat 函数原型:int creat(const char *pathname, mode_t mode); 函数参数:pathname --创建的文件名                   mode --创建的方式 S_IRUSR:可读 S_IWUSR:可写 S_IXUSR:可执行 S_IRWXU:可读可写可执行 0755 --> 111 101 101

root_robot的博客 540

详解C语言—文件操作

详细解释C语言文件操作相关知识。

Han同学 891
下一篇: 字符串的比较——strcmp
猪杂汤饭
博客等级 码龄12年 239粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值