当前位置: 首页 > news >正文

C语言从头学49—文件操作(四)

       本文继续上一篇有关 "文件操作" 内容并继续其编号。
十九、函数 ftell()
       函数 ftell() 返回文件内部指针的当前位置,该函数原型定义在头文件 stdio.h中。
       使用格式:ftell(参1);
              参1:文件指针
       返回值:返回值是一个long型的整数,表示文件开始处到当前位置的字节数;0表示文件开始位置。如果发生错误,返回-1。
       说明:
         a. 函数ftell与函数fseek配合使用,可以进行许多对文件内部指针的操作。比如:让fseek定位到文件结尾处,ftell可以返回整个文件的字节数。
二十、函数rewind()
       函数rewind()可以让文件的内部指针回到文件开始位置,该函数原型定义在stdio.h中 。
       使用格式:rewind(参1);
            参1:文件指针
       返回值:无
       说明:rewind()功能与fseek(fp,0L,SEEK_SET)差不多,但rewind() 没有返回值;rewind()还有一个作用,会清除当前文件的错误内部指针,鉴于此,需要将内部指针重置到文件开始位置时,应优先使用rewind()函数。
二十一、函数fgetpos()与函数fsetpos()
       函数fseek()和ftell()存在一个问题,就是对于文件的大小存在限制,不能超过4GB。4GB对于我们初学计算机的人员感觉已经很大,但对于专业应用场合往往会超出这个范围。为此,就有了专门处理大文件定位的函数fgetpos()和fsetpos()。这两个函数的原型也都定义在头文件stdio.h中。
       使用格式:fgetpos(参1, 参2);
          参1:文件指针
          参2:存储内部指针位置的变量地址(参2的类型fpos_t*,fpos_t是C语言专门为文件内部指针位置设置的数据类型,本质是long long,比fseek的long大了很多)
       返回值:执行成功时返回0 ,不成功返回非零值。(返回值可以用来判断函数内部指针位置是否有意义)
      使用格式:fsetpos(参1, 参2);
         参1:文件指针
         参2:指向准备设置内部指针位置的指针(类型同上一个函数,这个指针变量不能自己随意写一个,应是通过fgetpos函数获得)
     返回值:执行成功时返回0 ,不成功返回非零值。
二十二、函数ferror()与函数clearerr()
     文件操作函数如果执行失败,会在文件指针里面留下记录。后面的操作只要通过文件指针读取错误记录,就知道前面的操作出错了;ferror()可以读取错误记录,clearerr()可以清除文件指针中记录的错误记录。
       使用格式:ferror(参1);
          参1:文件指针
      返回值:如果前面的操作出现错误,ferror()返回一个非零整数(int类型),否则返回0 。
      使用格式:clearerr(参1);
          参1:文件指针
      返回值:无
二十三、函数remove()
      remove()函数用于删除文件,该函数原型定义在stdio.h中。
      使用格式:remove(参1);
          参1:文件名
      返回值:返回值为int型,删除成功返回0 ,失败返回非零值。
      说明:
       a.文件名可以用字符串变量传入,也可以直接写成字符串常量;
       b.文件如果不是在当前目录下,文件名应包含路径;
       c.要删除的文件必须是关闭状态的。
二十四、函数rename()
       rename()函数用于更改文件名称,该函数原型定义在头文件stdio.h。
       使用格式:rename(参1,参2);
          参1:文件原名字
          参2:文件新名字
       返回值:返回值为int类型,改名成功返回0,失败返回非0值。
       说明:
        a.文件名的要求同上一个函数;新旧文件名不能相同。
        b.当把文件新名字中的路径写成与原名字路径不同时,相当于把文件进行了移动。(由于路径不同,文件名相同也无所谓)
二十五、上述函数应用举例程序如下:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main(void)
{FILE* fp=fopen("temp.txt","wb+"); //以二进制写读方式创建temp.txtint arr[100];for (int i = 0; i < 100; i++){arr[i] = i + 1;}fwrite(arr, sizeof(int), 100, fp); //将整数1—100写入文件
//实验rewind函数rewind(fp); //该函数将内部指针指向文件开始int num;fread(&num, sizeof(num), 1, fp); //读取一个整型数printf("第1次读取到 %d\n", num); //运行结果:第1次读取到 1//第一次读取到的是1,说明rewind已将内部指针置于了文件开始处
//实验ftell函数fread(&num, sizeof(int), 1, fp);printf("第2次读取到 %d\n", num); //运行结果:第2次读取到 2long ps = ftell(fp);printf("sizeof(int)=%d\n", (int)sizeof(int));//运行结果:sizeof(int)=4printf("当前内部指针位于:%d\n", ps); //运行结果:当前内部指针位于:8//分析:由于每个int占4个字节,故字节0、1、2、3存储"1";字节4、5、6、7存储"2";2已读出,//所以指针指着下个数由字节8、9、10、11存储的"3"。
//实验fgetpos函数和fsetpos函数fpos_t pos;if(0!=fgetpos(fp, &pos)) return 0; //获取当前内部指针位置赋给posprintf("使用fgetpos获取当前内部指针:%d\n", (int)pos);//运行结果:使用fgetpos获取当前内部指针:8int num1[50];fpos_t pos1;fread(num1, sizeof(int), 50, fp);if(0!=fgetpos(fp, &pos1)) return 0; //获取当前内部指针位置赋给pos1printf("读取50个元素后当前内部指针:%d\n", (int)pos1);//运行结果:读取50个元素后当前内部指针:208if (0 != fsetpos(fp, &pos)) return 0; //将当前内部指针恢复到pos位置if (0 != fgetpos(fp, &pos1)) return 0;//重新获取内部指针赋值给pos1printf("恢复指针后当前内部指针:%d\n", (int)pos1);//运行结果:恢复指针后当前内部指针:8fclose(fp);
//实验函数ferror()与函数clearerr()if (NULL == freopen("temp.txt", "rb", fp))return 0;//以二进制读方式重新打开temp.txt,文件指针复用fpint a = 1000;fwrite(&a, sizeof(int), 1, fp);//我们将数据a试图写入以读方式打开的文件(应当出错)int ret = ferror(fp);//用ferror函数检查上一步读写函数是否出错printf("错误代码:%d\n", ret);//运行结果:错误代码:1(0正常,非0出错)clearerr(fp);//清除文件指针fp中的错误信息ret = ferror(fp);printf("再次查询错误代码:%d\n", ret);//运行结果:0(0正常,错误信息已清除)fclose(fp);
//实验rename函数char oldName[] = "temp.txt";char newName[] = "C:\\Users\\Administrator\\Desktop\\temp.txt";// "\\"头一个斜杠称为转义符ret = rename(oldName, newName);if (ret == 0){printf("文件更名成功!\n");//运行结果:temp.txt被移到了桌面}else{printf("文件更名失败...\n");}
//实验remove函数char filename[] = "temp.txt";ret = remove(filename);if (ret == 0){printf("文件删除成功...");}else{printf("文件删除失败...");//运行结果:删除失败(因为temp.txt被移到了桌面)}getchar();return 0;
}

相关文章:

C语言从头学49—文件操作(四)

本文继续上一篇有关 "文件操作" 内容并继续其编号。 十九、函数 ftell() 函数 ftell() 返回文件内部指针的当前位置&#xff0c;该函数原型定义在头文件 stdio.h中。 使用格式&#xff1a;ftell(参1); 参1&#xff1a;文件指针 返…...

算法力扣刷题记录 八十四【46.全排列】

前言 回溯章节第11篇。记录 八十四【46.全排列】 回溯学习过&#xff1a;组合问题、切割问题、子集问题。 本文是排列问题。 一、题目阅读 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&…...

[C++进阶]map和set

一、关联式容器 STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 那什么是关联式容器&#xff1f;它与序列式容器…...

ios机型下input输入框输入时拉高

问题 部分iphone或者ipad机型下&#xff0c;网页中使用input输入框时&#xff0c;调起ios软键盘输入时&#xff0c;input输入框被拉高&#xff0c;导致布局错位或者变化。 <input type"text" name"phonenum" >直观表现 注&#xff1a;在android机型…...

nacos 使用 docker 单机部署连接 MySQL 数据库并开启鉴权

文章目录 本地部署的配置启用鉴权(未验证) docker部署的配置修改docker 镜像源启用鉴权&#xff0c;必须添加如下环境变量如何生成鉴权的密钥 完整环境变量docker启动命令 本地部署的配置 文件结构 application.properties #配置文件 mysql-schema.sql …...

Opencv-C++笔记 (20) : 距离变换与分水岭的图像分割

文章目录 一、图片分割分水岭算法理解分水岭算法过程 二、距离变换与分水岭距离变换常见算法有两种分水岭变换常见的算法步骤 主要函数c代码四、结果展示 一、图片分割 图像分割(Image Segmentation)是图像处理最重要的处理手段之一 图像分割的目标是将图像中像素根据一定的规则…...

【流媒体】RTMPDump—Download(接收流媒体信息)

目录 RTMP协议相关&#xff1a; 【流媒体】RTMP协议概述 【流媒体】RTMP协议的数据格式 【流媒体】RTMP协议的消息类型 【流媒体】RTMPDump—主流程简单分析 【流媒体】RTMPDump—RTMP_Connect函数&#xff08;握手、网络连接&#xff09; 【流媒体】RTMPDump—RTMP_ConnectStr…...

Pytorch cat()与stack()函数详解

torch.cat() cat为concatenate的缩写&#xff0c;意思为拼接&#xff0c;torch.cat()函数一般是用于张量拼接使用的 cat(tensors: Union[Tuple[Tensor, ...], List[Tensor]], dim: _int 0, *, out: Optional[Tensor] None) -> Tensor: 可以看到cat()函数的参数&#xf…...

A. X(质因数分解+并查集)

题意&#xff1a;给定一个序列&#xff0c;求的方案数&#xff0c;其中&#xff0c;&#xff0c;i和j属于两个不同集合内。 解法&#xff1a;考虑怎样必须将某几个数放进一个集合里。如果数列中全是1&#xff0c;那么每个数都是独立的&#xff0c;也就是可以随便拿出这之中的数…...

自动化测试中如何应对网页弹窗的挑战!

在自动化测试中&#xff0c;网页弹窗的出现常常成为测试流程中的一个难点。无论是警告框、确认框、提示框&#xff0c;还是更复杂的模态对话框&#xff0c;都可能中断测试脚本的正常执行&#xff0c;导致测试结果的不确定性。本文将探讨几种有效的方法来应对网页弹窗的挑战&…...

Redission

一、Redis常见客户端 Jedis&#xff1a;简单&#xff0c;和命令最相似&#xff0c; API最丰富&#xff0c;多线程&#xff0c;不安全 SpringDataRedis: RedisTemplate&#xff0c;默认线程安全&#xff0c;底层基于Netty&#xff08;异步支持&#xff09;&#xff0c;用于一…...

负载均衡详解

概述 负载均衡建立在现有的网络结构之上&#xff0c;提供了廉价、有效、透明的方式来扩展网络设备和服务器的带宽&#xff0c;增加了吞吐量&#xff0c;加强了网络数据的处理能力&#xff0c;提高了网络的灵活性和可用性。项目中常用的负载均衡有四层负载均衡和七层负载均衡。…...

Swift与UIKit:构建卓越用户界面的艺术

标题&#xff1a;Swift与UIKit&#xff1a;构建卓越用户界面的艺术 在iOS应用开发的世界中&#xff0c;UIKit是构建用户界面的基石。自从Swift语言问世以来&#xff0c;它与UIKit的结合就为开发者提供了一个强大而直观的工具集&#xff0c;用于创建直观、响应迅速的应用程序。…...

Spring 中ClassPathXmlApplicationContext

ClassPathXmlApplicationContext 是 Spring Framework 的一个重要类&#xff0c;位于 org.springframework.context.support 包中。它是 ApplicationContext 接口的实现&#xff0c;专门用于从类路径下加载 XML 配置文件。通过这个类&#xff0c;你可以在 Spring 应用程序中设置…...

Springboot邮件发送:如何配置SMTP服务器?

Springboot邮件发送集成方法&#xff1f;如何提升邮件发送性能&#xff1f; 对于使用Springboot的开发者来说&#xff0c;配置SMTP服务器来实现邮件发送并不是一件复杂的事情。AokSend将详细介绍如何通过配置SMTP服务器来实现Springboot邮件发送。 Springboot邮件发送&#x…...

二叉树--堆

二叉树-堆 一、堆的概念及结构1.1 堆的概念与结构1.2 堆的性质 二、堆的实现三、堆的应用1、堆排序 一、堆的概念及结构 1.1 堆的概念与结构 堆就是完全二叉树以顺序存储方式存储于一个数组中。 然后每一个根都大于它的左孩子和右孩子的堆&#xff0c;我们叫做大堆&#xff…...

【K8s】专题十二(2):Kubernetes 存储之 PersistentVolume

本文内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01; 如果对您有帮助&#xff0c;烦请点赞、关注、转发、订阅专栏&#xff01; 专栏订阅入口 Linux 专栏 | Docker 专栏 | Kubernetes 专栏 往期精彩文章 【Docker】&#xff08;全网首发&#xff09;Kyl…...

python3多个图片合成一个pdf文件,生产使用验证过

简单的示例代码,展示如何将多个图片合成为一个 PDF 文件。 步骤 1: 安装依赖库 首先,确保你已经安装了 Pillow 和 reportlab 库: pip install Pillow reportlab步骤 2: 编写代码 下面是一个 Python 脚本,它将指定目录中的所有图片文件合成一个 PDF 文件: from PIL im…...

Stable Diffusion赋能“黑神话”——助力悟空走进AI奇幻世界

《黑神话&#xff1a;悟空》是由游戏科学公司制作的以中国神话为背景的动作角色扮演游戏&#xff0c;将于2024年8月20日发售。玩家将扮演一位“天命人”&#xff0c;为了探寻昔日传说的真相&#xff0c;踏上一条充满危险与惊奇的西游之路。 同时&#xff0c;我们还可以借助AI绘…...

微信小程序登陆

一 问题引入 我们之前的登陆都是&#xff1a;网页http传来请求&#xff0c;我们java来做这个请求的校验。 但是如果微信小程序登陆&#xff0c;就要用到相关的api来实现。 二 快速入门 1 引入依赖 官方依赖&#xff0c;在里面找合适的&#xff0c;去设置版本号。由于我这…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...