C fopen,fseek,fprintf,feof,ftell,rewind

【C/C++编程学习心得】C语言中文件流操作基本函数总结 1. FIELE *fopen(const char*filename,const char *mode)???? 以mode的方式,打开一个以filename(指针类型)命名的文件,返回一个指向该文件缓冲区的指针,该指针是后续操作的句柄。 注意:按二进制读取时需要加 'b',如 'rb', 'wb'... 2. int fclose(FILE *stream)???? fclose()用来关闭先前用fopen()打开的文件。并让文件缓冲区的数据写入文件中,并释放系统提供的... 阅读详情

1.      fopen

Ø  函数原型:

FILE * fopen ( const char * filename, constchar * mode )

Ø  功能:

功  能: 打开一个流 

Ø  返回值

If the file is successfully opened, thefunction returns a pointer to a FILE objectthat can be used to identify the stream on future operations.
Otherwise, a null pointer is returned.

Ø  函数说明

参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

mode
有下列几种形态字符串:
r
打开只读文件,该文件必须存在。
r+
打开可读写的文件,该文件必须存在。
w
打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+
打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a
以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+
以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
返回值
文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno中。
附加说明
一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。

范例
#include<stdio.h>
main()
{
FILE * fp;
fp=fopen
(“noexist”,”a+”);
if(fp= =NULL) return;
fclose(fp);
}

 

 

2.      fseek()函数

Ø  函数原型:

int fseek ( FILE * stream, long int offset, int origin );

Ø  功能: 重定位流上的文件指针

Ø  用法: int fseek(FILE *stream, long offset, int fromwhere);

Ø  描述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。

Ø   返回值: 成功,返回0,否则返回其他值。
  fseek position the file position pointer for the file referenced bystream to the byte location calculated by offset.

Ø  程序例:
 
 #include<stdio.h>
  long filesize(FILE *stream);
  int main(void)
  {
  FILE *stream;
  stream = fopen("MYFILE.TXT", "w+");
  fprintf(stream, "This is a test");
  printf("Filesize of MYFILE.TXT is %ld bytes\n",filesize(stream));
  fclose(stream);
  return 0;
  }
  long filesize(FILE *stream)
  {
  long curpos, length;
  curpos = ftell(stream);
  fseek(stream, 0L, SEEK_END);
  length = ftell(stream);
  fseek(stream, curpos, SEEK_SET);
  return length;
  }

 

         int fseek( FILE *stream, long offset,int origin );
       
第一个参数stream为文件指针
       
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
       
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或     SEEK_SET
        SEEK_SET
:文件开头
        SEEK_CUR
:当前位置
        SEEK_END
:文件结尾
   
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
  
简言之:
  fseek(fp,100L,0);
把fp指针移动到离文件开头100字节处;
  fseek(fp,100L,1);
把fp指针移动到离文件当前位置100字节处;
  fseek(fp,100L,2);
把fp指针退回到离文件结尾100字节处。

 

 

3.      fprintf()函数

Ø  头文件:#include <stdio.h>

Ø  定义函数:int fprintf(FILE * stream, const char * format, ...);

Ø  函数说明:fprintf()会根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束('\0')为止。

Ø  返回值:关于参数format 字符串的格式请参考printf().成功则返回实际输出的字符数, 失败则返回-1,错误原因存于errno 中.

范例

例1
#include <stdio.h>
main()
{
    int i = 150;
    int j = -100;
    double k = 3.14159;
    fprintf(stdout, "%d %f %x \n", j, k, i);
    fprintf(stdout, "%2d %*d\n", i, 2, i);
}

例2

#include <stdio.h>

 

int main ()

{

   FILE * pFile;

   int n;

   char name [100];

 

   pFile = fopen("myfile.txt","w");

   for (n=0 ; n<3; n++)

   {

     puts("please, enter a name: ");

     gets (name);

     fprintf (pFile,"Name %d [%-10.10s]\n",n+1,name);

   }

   fclose (pFile);

 

   return 0;

}

 

4.      feof()函数

Ø  函数原型

int feof ( FILE * stream );

Ø  示例程序(函数的意思程序写的非常明确与EOF的区别)

 

/* feof example: byte counter */

#include <stdio.h>

 

int main ()

{

  FILE * pFile;

  int n = 0;

  pFile = fopen("myfile.txt","rb");

  if (pFile==NULL)perror ("Error opening file");

  else

  {

    while (fgetc(pFile)!= EOF) {

      ++n;

    }

    if (feof(pFile)){

      puts("End-of-File reached.");

      printf("Total number of bytes read: %d\n", n);

    }

    else puts("End-of-File was not reached.");

    fclose (pFile);

  }

  return 0;

}

Ø  说明

 EOF的值为-1,是int类型数据,在32位系统中,可以表示为0xFFFFFFFF; EOF 不是一个字符,也不是文件中实际存在的内容。EOF不但能表示读文件到了结尾这一状态,它还能表示 I/O 操作中的读、写错误(可以用ferror() 来检测)以及其它一些关联操作的错误状态;
      feof()
只用于测试流文件的结束,当到达结尾时,返回非0;当文件内部位置指针指向文件结束时,并未立即置位FILE结构中的文件结束标记,只有再执行一次读文件操作,才会置位结束标志,此后调用feof才会返回为真。
     
函数如fgetc或getc返回EOF并不一定表示文件结束,当读取文件出错时也会返回EOF,仅凭返回-1就认为文件结束是错误的;正因为如此,我们需要feof()来判断文件是否结束,当然用feof()来判断文件结束时也需要判断读取操作是否出错,这时可以用ferror()来判断,当其为真时表示有错误发生。在实际的程序中,应该每执行一次文件操作,就用用ferror函数检测是否出错。

 

5.  ftell() 函数

Ø  函数原型:

long int ftell ( FILE * stream );

Ø  功能

 返回当前文件位置,也就是说返回FILE指针当前位置

Ø  示例

举例1:

#include<stdio.h>

intmain(void)

{

FILE*stream;

stream= fopen("MYFILE.TXT", "w+");

fprintf(stream,"This is a test");

printf("Thefile pointer is at byte \

%ld\n",ftell(stream));

fclose(stream);

return0;

}

例2

#include<stdio.h>

main()

{

FILE*myf;

longf1;

myf=fopen("1.txt","rb");

fseek(myf,0,SEEK_END);

f1=ftell(myf);

fclose(myf);

printf(“%d\n”,f1);

}

 

6.  rewind()  函数

Ø  函数原型:

void rewind ( FILE * stream );

Ø  功能:

将文件内部的位置指针重新指向一个流(数据流/文件)的开头

Ø  注意

不是文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。而文件指针是指向整个文件,如果不重新赋值文件指针不会改变。

rewind函数作用等同于 (void)fseek(stream, 0L, SEEK_SET);[1]

Ø  示例程序:

#include<stdio.h>

#include<dir.h>

intmain(void)

{

FILE*fp;

charfname[10] = "TXXXXXX", *newname, first;

newname= mktemp(fname);

fp= fopen(newname,"w+");

if(NULL==fp)

return1;

fprintf(fp,"abcdefghijklmnopqrstuvwxyz");

rewind(fp);

fscanf(fp,"%c",&first);

printf("Thefirst character is: %c\n",first);

fclose(fp);

remove(newname);

return0;

}

 

 

 

C语言文件输入输出函数总结 总结一下文件输入和输出常用函数用法 总结: fopen,getc,fgetc,putc,fputc,exit,fclose,fprintf,fscanf,fgets,fputs,puts,rewind,fseek,ftell,fflush,fgetpos,fsetpos,feof,ferror,ungetc,setvbuf,fread,fwrite函数用法。 偷偷给图片换个皮,要是被某人抓到了,那就是抓到我了 fopen用法: FILE *fp;fp=fopen(“1.txt”,“r+”); 这里说一下 阅读详情

相关推荐

办公技巧:43个Excel函数,进阶必备,值得收藏

今天给大家分享43个Excel函数,希望对大家能有所帮助!

IT技术分享社区 8021

函数(function)

C语言中的函数内容的详解。

2401_87255690的博客 2595

WSL 相关命令时遇到了 “无法从raw.githubusercontent.com提取分发列表、操作超时

核心问题:国内网络屏蔽raw.githubusercontent.com,导致WSL无法获取发行版列表;最优方案:优先用方案1(手动指定发行版安装),无需改配置,1分钟搞定;永久修复:用方案2(修改hosts),适合需要管理多个WSL发行版的场景;兜底方案:用方案3(手动下载安装包),适配所有网络环境。按以上步骤操作后,你不仅能正常安装WSL,等命令也能正常执行,后续可正常使用WSL搭配Docker Desktop(如切换WSL 2后端),无需再担心网络超时问题。

weixin_39766667的博客 2139

函数基本知识

这里写自定义目录标题函数基本知识函数单调性函数奇偶性(奇、偶函数的定义域一定关于原点对称,如果一个函数的定义域不关于原点对称,则这个函数一定不是奇、偶函数。)函数运算函数周期性插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 函数基本知识 函数三要素:定义域、值域、对应法则,其核心为对应法则

weixin_47829690的博客 1万+

鸿蒙【ArkTS】使用TS装饰器封装网络请求HTTP

在HarmonyOS应用开发中,通过HTTP访问网络,可以使用官方提供的@ohos.net.http模块。但是官方提供的直接使用不太好使用,需要封装下才好。这里采用TS的装饰器实现AOP效果 完成前后端接口风格的统一

weixin_60376559的博客 5611

Python实战:用NumPy实现LU分解与QR分解(附代码对比)

本文深入探讨了使用NumPy实现LU分解与QR分解的实战方法,通过代码对比分析了两种矩阵分解技术的原理、数值稳定性差异及核心应用场景。LU分解适用于高效求解线性方程组,而QR分解凭借其正交化特性,在求解最小二乘问题和处理病态矩阵时更具优势。文章提供了详细的Python代码示例,帮助开发者根据具体问题选择最合适的分解方法。

php55的博客 1212

数学函数知识点全解:从基础概念到实际应用

自变量x的取值集合A。

znzzy的博客 1840

UNet改进(12):融合小波变换与注意力机制的图像分割新方法

本文提出了一种改进的WaveletAttentionUNet架构,通过结合小波变换和注意力机制来增强传统UNet的多尺度特征提取能力。该网络使用分组卷积模拟小波分解,将输入通道扩展为4个子带(LL、LH、HL、HH),并通过通道注意力机制自适应加权各子带特征。网络保留了UNet的编码器-解码器结构,在关键位置集成了WaveletAttention模块。实验证明该方法在医学图像分割等任务中能更好地保持边缘细节和复杂纹理特征,同时保持计算效率。

2501_91516851的博客 758

欧拉函数相关数论

欧拉函数 欧拉函数ϕ(n)\phi(n) 的百度百科定义是:“对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(ϕ(1)=1)(\phi(1)=1)。”不如将小于改成小于等于,倒是省去ϕ(1)\phi(1) 的特例。关于欧拉函数的证明,不多赘述。本文侧重于欧拉函数在编程竞赛中的应用,这里只将其中三个知识点提出来(其他公式皆可由这三个公式推导得出): 1.ϕ(1)=1\phi(1)=

Dmaxiya 831

【5】GD32H7xx CAN发送及FIFO接收

GD32H7xx CAN收发调试记录,包含源码

madao1234的博客 1814

MATLAB与ROS联合仿真——订阅ROS消息类功能模块介绍

MATLAB与ROS联合仿真——订阅ROS消息类功能模块介绍 (1)输入参数:无 (2)输出参数:Xr和Yr是小车当前在世界坐标系下的坐标 (3)主要作用:作为ROS与MATLAB的通讯接口,从ROS中订阅小车当前的位置信息,并输出 (4)内部结构: (5)具体实现过程:通过ROS工具箱中的Subscribe模块从ROS中订阅话题/gazebo/link_statesa 通过Bus Selector模块选择ROS总线中的Pose

慕羽★的博客 2699

fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结

转载自:http://blog.youkuaiyun.com/xidianzhimeng/article/details/23541289 1 fopen 函数原型:FILE * fopen(const char * path,const char * mode); 返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。...

a623277405的博客 210

芒果YOLO11改进176:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

芒果YOLO11改进186:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2132

[C语言]文件操作大全fopen,fclose,fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite,fseek,ftell,rewind.

我们如果要在VS对其进行操作,这个时候就得用到fopen函数,fopen即为打开一个文件,这个函数返回的类型为FILE类型的一个指针,所谓FILE类型也就是文件类型,意思就是有个指针指向你打开的文件,类型为FILE类型。文件变成了乱码,因为我们输入的数据在文件中是以二进制的形式进行输入的,正常来说我们输入的数据是以ASCII码值对应的文本显示,但是这里我们直接输入二进制数据,显示的就这一系列二进制对应的ASCII码值,得到一个很奇怪的文案。不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。

azurehan01的博客 1079

管好 SAP Fiori Launchpad Content:技术目录、业务目录与 KPI 工具的完整治理思路

SAP Fiori Launchpad 作为企业级统一入口,需通过技术目录(源对象)和业务目录(引用编排)分层治理。技术目录由 Launchpad App Manager 维护,负责应用描述对象(Tile 和 Target Mapping)的创建与管理;业务目录由 Launchpad Content Manager 编排,通过引用技术目录对象实现灵活配置。分析型内容则通过 F2814 统一管理。这种分层设计支持应用复用,便于升级维护,是 SAP S/4HANA 项目中实现高效内容治理的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 132

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

c第五天任务//用代码创建文件,输入内容,保存,读取内容//与C语言文件操作相关函数讲解

C第五天任务 输入文件名,创建文件,并写入文件内容。 如下: 答案: 1: #include <stdio.h> #include <stdlib.h> void main() { FILE*fp; char ch,filename[20]; printf("请输入文件名:\n"); scanf("%s",filename); fp=fopen(filena...

Star19180325的博客 865

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C语言 文件笔记

1. fopen(" 文件名 “,” 代号 "); 例如 : fp = fopen(“123.txt”, “w”); w:用于输出到文件里 新建一个新文件 如果有同名的就删除再新建 r: 用于输入 打开一个原有的文件 a: 用于输入到文件 与w不同的是 w是新建一个文件 然后再重新给它数据 而a是再原有的数据之后加上新的数据 r+也能写如到文件 但是r+写的文件是 从开头开始的 所以a的作用是追加...

weixin_45653525的博客 403

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C 语言文件操作函数大全 (超详细)

fopen(打开文件) 相关函数 fopen,fclose 表头文件 # include 定义函数 FILE * fopen (const char * path,const char * mode); 函数说明 参数 path 字符串包含欲打开的文件路径及文件名,参数 mode 字符串则代表着流形态。注意:上述的形态字符串都可以再加一个 b 字符,如 rb、w+b 或 ab+等组合,加入 b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在 POSIX 系统,包含 Lin...

coder_Alger 的博客 1262

文件流操作、EOF

参考网址: http://www.runoob.com/cprogramming/c-standard-library-stdio-h.html 1. fseek、rewind int fseek(FILE *stream, long int offset, int whence) 参数 offset -- 这是相对 whence 的偏移量,以字节为单位。 whence -- 这是表示开...

weixin_42639771的博客 930

C语言文件操作(具体操作)

(内存),这块内存存放着一个结构体FILE,用于存放文件相关信息,如:文件的名字,文件状态及文件当前的位置等,而指向这块内存(结构体)位置的指针就是文件指针。character(字符)(之所是int型,是ASCLL码值),stream(输出流)(写入的文件地址)。origin:(位置)该参(SEEK_SET)起始位置,(SEEK_CUR)当前位置,(SEEK_END)文件末尾位置。str(要输入的字符串),stream(待输入的文件的地址),fputs(成功返回非负值,失败返回EOF)。

wuheqinli_yzw的博客 1873

【C语言】文件操作函数

【C语言】文件操作函数

Zhuang_N的博客 3626

C语言--文件操作

文件操作

qzt__l0ve的博客 855

c语言文件操作(万字解析)

全面的介绍什么是文件,文件的类型以及文件操作的各种函数。

m0_73790767的博客 2633

C : 文件操作

fopen fopen打开文件后,fscanf, fprintf对文件操作;普通的scanf和printf在命令行界面操作 FILE *fp1,*fp2; //定义文件指针类型 fp1=fopen("input.in","r"); //用fopen函数以只读方式(r)打开输入文件input.in; fp2=fopen("output.out","w");//用fopen函数以写入方式(w)打开输出...

yangjinjingbj的博客 191
上一篇: STL 常用算法
下一篇: fputs与fgets
ToConnection
博客等级 码龄16年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值