广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言如何实现随机读写文件
  • 569
分享到

C语言如何实现随机读写文件

2023-07-05 19:07:31 569人浏览 安东尼
摘要

这篇文章主要讲解了“C语言如何实现随机读写文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何实现随机读写文件”吧!1.fseek前面已经剧透过了,fseek可以改变记录读写位置的指

这篇文章主要讲解了“C语言如何实现随机读写文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何实现随机读写文件”吧!

1.fseek

前面已经剧透过了,fseek可以改变记录读写位置的指针的指向,从而实现文件的随机读写。该函数的声明如下:

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

第一个参数大家都很熟悉了,就是一个文件指针,告诉fseek我现在操作的是哪个文件。

第二个参数,offset是偏移量的意思,大家先记住。第三个参数,origin,顾名思义,即“起始位置”。后面两个参数让人摸不着头脑,但是配合起来就很有意思了。

举个例子:假设一个文件中存有abcdefg,当你用fopen打开这个文件时,一个记录读写位置的指针就指向了起始位置,也就是指向了a。如果我想读取第5个字符,即e呢?那我就要让这个指针指向e,这样再fgetc就能读到e了。

我可以这样算:e相对于起始位置a,向右偏移了4个字符,因为相对于a,a自己的偏移量是0,b是1,c是2,d是3,e自然是4。那么,偏移量offset(fseek的第二个参数)就是4,这个4是相对于起始位置的,这个“相对于”哪里,也就是origin(fseek的第三个参数)的位置,此时origin就是“起始位置”,明白了吧。而fseek用一个宏SEEK_SET来表示“起始位置”,所以此时fseek的调用如下:

fseek(pf, 4, SEEK_SET);

下面我们来验证一下。先在工程目录下创建一个文件,文件名是test.txt,然后在里面输入abcdefg。

C语言如何实现随机读写文件

按照打开文件->读文件->关闭文件的顺序,写代码:

#include <stdio.h>int main(){FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}fseek(pf, 4, SEEK_SET);putchar(fgetc(pf));fclose(pf);pf = NULL;return 0;}

打开文件后,使用fseek让记录读写位置的指针指向e,接着用fgetc读取e并用putchar打印出来,输出结果如下:

C语言如何实现随机读写文件

我们就成功跳过了前面的abcd,直接读取到e,实现了文件的随机读写。

当然,读取到e不止有这一种写法。fseek的第三个参数origin有三种取值,分别是:

SEEK_SET,表示起始位置。

SEEK_CUR,表示当前指向的位置。

SEEK_END,表示文件末尾。

SEEK_SET和SEEK_CUR都很好理解,需要注意的是,SEEK_END不是指向最后一个字符,而是指向最后一个字符的下一个位置。比如,一个文件中存有abcdefg,SEEK_END不是指向g,而是指向g的下一个位置。所以同样是读到e,如果origin是SEEK_END,offset就应该是-3,因为g的偏移量是-1,f是-2,所以e是-3。把上面代码中的fseek的调用方式改一下,其他不变:

fseek(pf, -3, SEEK_END);

也可以读到e,因为在执行完上面这行代码后,记录读写位置的指针就指向了e,所以读取时就跳过了前面的abcd,直接读到e。说明一下,由于读写前该指针指向了e,调用fgetc读完e后,该指针就指向了e后面的f,也就是说,此时SEEK_CUR就指向了f,如果我们想读到b呢?可以数一下,abcdefg,b相对于SEEK_CUR(指向f)的偏移量就是-4,如果像下面的代码这样写:

#include <stdio.h>int main(){FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}fseek(pf, -3, SEEK_END); // 指向eputchar(fgetc(pf)); // 读完e后指向ffseek(pf, -4, SEEK_CUR); // 指向bputchar(fgetc(pf)); // 读完b后指向cfclose(pf);pf = NULL;return 0;}

输出结果如下:

C语言如何实现随机读写文件

2.ftell

我如果想知道此时记录读写位置的指针相对于起始位置的偏移量(即相对于SEEK_SET的偏移量)是多少,就可以问问ftell函数。该函数声明如下:

long int ftell ( FILE * stream );

ftell会返回当前相对于起始位置的偏移量。比如前面的例子中调用:

#include <stdio.h>int main(){FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}fseek(pf, -3, SEEK_END); // 指向eputchar(fgetc(pf)); // 读完e后指向ffseek(pf, -4, SEEK_CUR); // 指向bputchar(fgetc(pf)); // 读完b后指向cprintf("\n%ld\n", ftell(pf));fclose(pf);pf = NULL;return 0;}

由于此时记录文件读写位置的指针指向了c,偏移量是2(a为0,b为1,c为2),所以会输出2。

C语言如何实现随机读写文件

3.rewind

rewind的作用是,让指向文件读写位置的指针指向文件的起始位置。该函数声明如下:

void rewind ( FILE * stream );

其实非常简单,rewind(pf);和fseek(pf, 0, SEEK_SET);是等价的。

在前面的例子中,记录文件读写位置的指针左右横跳,最后指向了c,此时ftell也返回了2,这时如果我rewind一下,该指针就又指向了起始位置,即a,再ftell就能知道偏移量回到了0,如果再fgetc,就能重新读取到a了。代码如下:

#include <stdio.h>int main(){FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}fseek(pf, -3, SEEK_END); // 指向eputchar(fgetc(pf)); // 读完e后指向ffseek(pf, -4, SEEK_CUR); // 指向bputchar(fgetc(pf)); // 读完b后指向cprintf("\n%ld\n", ftell(pf));rewind(pf);printf("%ld\n", ftell(pf));putchar(fgetc(pf)); // afclose(pf);pf = NULL;return 0;}

输出结果:

C语言如何实现随机读写文件

当然,把上述代码中的rewind(pf);换成fseek(pf, 0, SEEK_SET);的效果是一样的。

感谢各位的阅读,以上就是“C语言如何实现随机读写文件”的内容了,经过本文的学习后,相信大家对C语言如何实现随机读写文件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: C语言如何实现随机读写文件

本文链接: https://www.lsjlt.com/news/354888.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言如何实现随机读写文件
    这篇文章主要讲解了“C语言如何实现随机读写文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何实现随机读写文件”吧!1.fseek前面已经剧透过了,fseek可以改变记录读写位置的指...
    99+
    2023-07-05
  • C语言实现随机读写文件的函数详解
    目录1.fseek2.ftell3.rewind总结在上一篇博客中,我详细讲解了如何使用C语言顺序读写文件。所谓顺序读写,就是按照顺序,挨个挨个的读或者写,换句话说,我必须先读第一个...
    99+
    2023-05-14
    C语言随机读写文件 C语言读写文件 C语言 文件
  • C语言如何读写文件
    本篇内容介绍了“C语言如何读写文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码如下:char buff[1000]={0};...
    99+
    2023-06-17
  • C语言Iniparser库实现ini文件读写
    目录一、概述二、使用下载方式一方式二三、API函数四、演示一、概述 iniparser是针对INI文件的解析器。ini文件则是一些系统或者软件的配置文件。iniparser库的API...
    99+
    2023-03-20
    C语言 ini文件读写 C语言 ini文件 C语言 Iniparser库
  • C语言实现文件读写功能流程
    目录打开文件关闭文件写入文件读取文件二进制 I/O 函数上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。 一个...
    99+
    2022-12-30
    C语言文件读写函数 C语言文件读写操作
  • C语言rewind与fseek函数之随机读写文件的用法详解
    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据。但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写。这种...
    99+
    2022-11-12
  • AndroidNDK开发(C语言-文件读写)
    目录1.文件读写 1.1打开文件 1.2关闭文件 1.3读取文件 1.4写入文件 1.5读写二进制I/O文件 1.6获取文件的大小 1.7文本简单加密、解密 1.8二进制文件简单加解...
    99+
    2022-11-12
  • 怎么使用C语言Iniparser库实现ini文件读写
    这篇“怎么使用C语言Iniparser库实现ini文件读写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用C语言Ini...
    99+
    2023-07-05
  • C#如何实现读写CSV文件
    这篇文章主要介绍“C#如何实现读写CSV文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#如何实现读写CSV文件”文章能帮助大家解决问题。CSV文件标准在介绍CSV文件的读写方法前,我们需要了解...
    99+
    2023-07-02
  • C# CSV文件读写如何实现
    这篇文章主要介绍了C# CSV文件读写如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C# CSV文件读写如何实现文章都会有所收获,下面我们一起来看看吧。CSV是一种通用的、相对简单的...
    99+
    2023-07-05
  • c语言怎么对文件进行读写
    C语言提供了一组文件操作函数,用于打开、读、写和关闭文件。下面是一个简单的示例,演示了如何对文件进行读写。1. 打开文件:```c#...
    99+
    2023-09-27
    c语言
  • C语言中的文件读写fseek 函数
    目录一.fseek 函数简介二.fseek 函数实战一.fseek 函数简介 fseek 函数用来移动文件流的读写位置;就好比播放器,可以直接拖拽到精彩的时间点一样,fseek 函数...
    99+
    2022-11-12
  • 关于C语言 文件读写 feof 函数
    目录一.feof 函数简介二.feof 函数实战一.feof 函数简介 feof是一个c语言函数,既可用以判断二进制文件又可用以判断文本文件。feof(fp)有两个返回值:如果遇到文...
    99+
    2022-11-12
  • C语言读取写入ini配置文件的方法实现
    目录一、了解什么是INI文件?二、INI文件的格式三、解析上述文件四、测试如下一、了解什么是INI文件? ini 文件是Initialization File的缩写,即初始化文件,这...
    99+
    2022-11-12
  • C语言实现随机抽奖程序
    本文实例为大家分享了C语言实现抽奖小程序的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #...
    99+
    2022-11-12
  • Python随机读取文件实现实例
    Python随机读取文件 代码如下 import os import random rootdir = "d:\face\train" file_names = [] for parent, dirn...
    99+
    2022-06-04
    实例 文件 Python
  • C\C++如何实现读写二进制文件
    这篇文章主要介绍“C\C++如何实现读写二进制文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C\C++如何实现读写二进制文件”文章能帮助大家解决问题。读写二进制文件打开文件fopen() 函数用...
    99+
    2023-07-05
  • C/C++中文件的随机读写详解及其作用介绍
    目录概述随机读写函数例子指针流成员函数随机访问二进制数据概述 文件的操作方式分为顺序读写和随机读写. 顺序读写指文件的指针只能从头移到尾巴. 随机读写指文件指针可以随意移动, 根据需...
    99+
    2022-11-12
  • C语言如何实现BMP图像读写功能
    这篇文章给大家分享的是有关C语言如何实现BMP图像读写功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C语言实现BMP图像的读写对于刚接触数字图像的同学,应该都有一个疑问,如何把一个BMP格式的图像用纯C语言读...
    99+
    2023-06-14
  • C语言如何实现随机抽取纸牌程序
    本篇内容主要讲解“C语言如何实现随机抽取纸牌程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现随机抽取纸牌程序”吧!程序设计要求本程序负责发一副标准纸牌,每张标准纸牌都有一种花色(...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作