C语言文件操作(含代码+例题)

article/2025/10/3 19:45:09
  1. 为什么使用文件?


使用文件可以将数据直接存放在电脑的硬盘上,做到数据的持久化

一般来说,做到数据持久化的方法有把数据放在磁盘文件、存放到数据库等方式。

  1. 什么是文件?


文件的分类

磁盘上显示的文件就是文件。一般有数据文件和程序文件。

文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用。

文件名包含3部分:文件路径+文件名主干+文件后缀

例如: c:\code\test.txt

为了方便起见,文件标识常被称为文件名

3.文件的打开与关闭

文件的指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称**“文件指针”**。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。

struct _iobuf {char *_ptr;int   _cnt;char *_base;int   _flag;int   _file;int   _charbuf;int   _bufsiz;char *_tmpfname;};
typedef struct _iobuf FILE;
FILE* pf;//文件指针变量

不同的C编译器的FILE类型包含的内容不完全相同,但是原理基本上是一致的。

FILE* pf;//文件指针变量

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。

文件的打开和关闭

ANSIC 规定使用:

fopen函数来打开文件

fclose来关闭文件。

要记住的是当打开文件后对数据进行处理完一定要关闭文件,否则可能会造成数据的丢失。

//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
int fclose ( FILE * stream );
/* fopen fclose example */实际的案例
#include <stdio.h>
int main ()
{FILE * pFile;\\定义文件指针//打开文件pFile = fopen ("myfile.txt","w");//以输出的形式(写)打开文件//文件操作if (pFile!=NULL){fputs ("fopen example",pFile);//以字符串的形式写入//关闭文件fclose (pFile);}return 0; 
}

文件的读写顺序

四、fseek函数

根据文件指针的位置和偏移量来定位文件指针。文件指针顾名思义也是一个指针,它能指向一个字符串中的某个位置。它要接收的参数有:

可以在下面代码中查询到相关的函数的使用和参数   https://legacy.cplusplus.com/reference/cstdio/fseek/?kw=fseek

第一项是SEEK_CUR,即当前文件指针的偏移处开始向后偏移。

第二项是SEEK_END,即从文件的最末尾处开始向前偏移,当然在偏移数一定要为负数才能读取文件中的内容。

第三项是SEEK_SET,即从文件的最前端处开始向后偏移。

#include <stdio.h>
int main ()
{FILE * pFile;pFile = fopen ( "example.txt" , "wb" );fputs ( "This is an apple." , pFile );fseek ( pFile , 9 , SEEK_SET );fputs ( " sam" , pFile );fclose ( pFile );return 0; }

结果是This is a sample.

         原因是在第一次fputs中是把This is an apple.先放入记事本当中,当调用fseek函数时,从当前的文件指针处向后偏移9个字节,文件指针一开始默认指向的是文件的首地址处。因此向后偏移9个字节后(偏移一个字节包括空格)指向的是最后一个空格的地址处。而第二次fputs函数是将“ sam”这个内容在上次文件指针指向的地址处开始写入。

五、ftell函数

函数比较简单,输入的参数为文件指针流,而返回值的类型为int,即返回的是文件指针所指向的偏移量处。

#include <stdio.h>
int main ()
{FILE * pFile;long size;pFile = fopen ("myfile.txt","rb");if (pFile==NULL) perror ("Error opening file");else{fseek (pFile, 0, SEEK_END);   // non-portablesize=ftell (pFile);fclose (pFile);printf ("Size of myfile.txt: %ld bytes.\n",size);}return 0; 
}

六、rewind函数

rewind函数的返回值类型为void型,它所需要的参数是文件指针流。

#include <stdio.h>
int main ()
{int n;FILE * pFile;char buffer [27];pFile = fopen ("myfile.txt","w+");for ( n='A' ; n<='Z' ; n++)fputc ( n, pFile);rewind (pFile);fread (buffer,1,26,pFile);fclose (pFile);buffer[26]='\0';puts (buffer);return 0; }

http://chatgpt.dhexx.cn/article/LHHImZMP.shtml

相关文章

Android修改项目包名

一 Android Studio 修改过程 修改项目包名&#xff0c;实现不覆盖安装(如果只是想不覆盖安装&#xff0c;更改build.gradle里面的包名就OK了&#xff0c;那这篇博文到这里就可以结束了&#xff0c;如果希望项目层次的包名也更改的话&#xff0c;请往下看) 1.首先新建一个项目&…

安卓Studio修改包名

修改项目包名 1&#xff09;选中项目中药修改的包名&#xff1a; 2)目结构显示方式&#xff0c;取消 Compact Middle Packages 选项&#xff1b; 3)右键要修改的包名&#xff0c;选择 Refactor —— Rename 打开修改编辑框&#xff1b; 4)点击 Rename package 修改包名: 5)输…

Java包名与包路径

很多初学者以为只要把生成的class文件放在某个目录下&#xff0c;这个目录名就成了这个类的包名。这是一个错误的看法&#xff0c;不是有了目录 结构&#xff0c;就等于有了包名。为Java类添加包必须在Java源文件中通过 package语句指定&#xff0c;单靠目录名是没法指定的。…

Android 获取应用包名

Android 获取应用包名 得知华为把荣耀手机卖了, 看着我手中的荣耀30&#xff0c;突然想到会不会给我的手机推送一些奇奇怪怪的东西&#xff0c; 为了保险起见&#xff0c;决定把系统更新禁用了 然鹅&#xff0c;我竟然在华为的系统里看不到应用包名&#xff0c; 苦寻无果后&a…

如何查看IOS系统APP的包名

一.使用mac系统查看方法 使用mac系统&#xff0c;commond空格搜索 输入console进入控制台 选中连接的设备&#xff0c;启动app&#xff0c;日志刷新&#xff0c;右上方过滤搜索&#xff1a;submitting 就能看到当前应用的包名了&#xff0c;一般包名中有itunes.xxx 二.使用…

uniapp包名查看方法

uniapp小米应用分发平台上线应用过程梳理 一、账号申请审核 二、创建应用&#xff08;提交的包名与manifest.json中Dcloud AppleID相似但是不是&#xff09; 小米异常信息截图 三、安卓包名&#xff1a;参考安卓手机查看包名 ps:不要使用链接中的命令 直接使用adb shell dum…

IntelliJ IDEA 如何快速的修改包名

没错。我就是这么无聊。&#xff08;请不要吐槽我的习惯&#xff0c;只是因为看到顺序很奇怪就想排个序&#xff09; 本人有轻微的强迫症&#xff0c;拿到一个项目src目录和resources、WebRoot目录在同级。然后顺序乱七八糟&#xff0c;我有点受不了。我就按照以前的习惯。顺手…

Java-包名规范

Java项目包分类

安卓快速修改包名 -.- 备忘

文章目录 前言一、需要修改的点二、修改 applicationId三、修改 AndroidManifest 中的 package 包名四、修改项目目录结构 包名五、批量更改 import &#xff08;全局替换文本&#xff09;六、修改其他一些使用了 applicationId 的地方及获得应用ID 前言 改包名自然不是第一次…

IDEA如何修改包名

有很多小伙伴从网上找了项目源码后&#xff0c;发现项目的包名不符合自己的要求&#xff0c;想要修改一下包名&#xff0c;把他变成自己的。所以这里给大家讲解一下&#xff0c;如何修改项目的包名。 1.打开项目&#xff0c;我们可以看到原项目的包名是用自己的名字命名的&…

as修改包名

之前修改包名的时候&#xff0c;顺序总是不对&#xff0c;修改包名之后&#xff0c;各个类中引用地址都需要改变&#xff0c;很麻烦。特意拿出一些时间&#xff0c;整理一下这边&#xff0c;记录一下。 1.首先 &#xff0c;修改包名 &#xff0c;可以先根据自己的需要更改包名的…

如何知道一个App的包名

包名&#xff08;Package name&#xff09;在Android系统中是判断一个App的唯一标识&#xff0c;不同的App可以有同样的名字&#xff0c;但是它的包名不可以相同 例如我可以自己编译生成一个App也叫“微信”&#xff0c;但是我App的包名不能为com.tencent.mm&#xff08;微信的…

获取应用包名

一、获取应用包名的方法 1、根据应用的apk文件来获取 &#xff08;1&#xff09;打开cmd窗口&#xff0c;cd命令切换到Andorid SDK下的aapt所在目录&#xff08;一般在build-tools目录下&#xff09;注&#xff1a;切换到不同磁盘的目录&#xff0c;需要先切换到对应的磁盘&am…

android 包名工具,查看包名(安卓应用包名查看工具)

查看包名app功能最为全面的安卓应用安装包信息查看器,不仅是包名,各种md5信息,图标内容,版本号等等都能显示,并且不用安装就能插件安装包内的各种内容,十分方便,喜欢的朋友们赶快下载查看包名app开始体验吧&#xff01; 查看包名软件介绍 查看应用包名app是一款可以快速查看手机…

Java之包名

1. 包名代表一层一层的文件夹&#xff0c;即会自动生成相应的文件目录&#xff0c;如包名pers.chen.hello_java&#xff1a; 表示&#xff1a; 2. 包名的命名规则 &#xff08;1&#xff09;格式&#xff1a;版权所有.版权所有者名.项目名.模块名 &#xff08;2&#xff09;全…

包( package )的命名规则、常用包名、更改包的显示方式

包: 相当于windows中的文件夹 *作用: 1. 分类整理和保存代码, 方便管理和使用 2. 不同包中可以存在同名的类 *命名要求: 1. 通常只使用小写字母 2. 通常每个包的名字只使用1个单词 3. 域名倒置 通常使用组织的网络域…

包的命名及作用

一、包命名规则&#xff1a; 1、 包名 全部由小写字母 &#xff08;多个单词也全部小写&#xff09; &#xff1b; ( 这是约定俗成的规范 ) 2、 如果包名包含多个层次&#xff0c; 每个层次应该用“ .” 分割&#xff1b; 3、 包名一般由倒置的域名开头&#xff0c;比如 com.ba…

Java基础第六课(关于包名的讲解)

好啦&#xff0c;开始。。。 写了好几次代码 不知道你们注意到没 每次我创建Class的时候 上面都有个package没填写 如下图&#xff1a; 其实这个就是包名 1.什么叫包&#xff1f; 为了更好地组织类&#xff0c;Java提供了包机制。包是类的容器&#xff0c;用于分隔类名空间。如…

Java 遍历JsonNode

如图&#xff0c;有一个jsonNode对象&#xff0c;我想获得路径"data" -> "items"数组下的每个元素的某个值&#xff0c;比如id&#xff0c;那么我得遍历这个数组Node对象。 使用elements()方法即可&#xff0c;直接上代码&#xff1a; // 遍历jsonNode&…

json对象的遍历(C++)

在使用C的项目中&#xff0c;对json进行解析时&#xff0c;如果对象列表过长&#xff0c;通常就需要对对象进行遍历&#xff0c;来实现解析。 我参看了博客&#xff0c;如下&#xff1a; https://blog.csdn.net/hellokandy/article/details/51607311 使用iterater对json对象…