首页 > 其他分享 >初学C语言day11--文件IO及文件操作

初学C语言day11--文件IO及文件操作

时间:2023-08-05 09:56:32浏览次数:39  
标签:文件 stream -- 写入 C语言 FILE size 指针

C语言文件IO

文件的分类:
文本文件:人能看得懂的文件,存储的是数据ASCII码的二进制
'2''5''5' 50 53 53
二进制文件:人看不懂,存储的是数据的补码
255 1111 1111

文件IO:

FILE *fopen(const char *path, const char *mode);
功能:打开或创建文件
path:文件的路径
如果是相对路径,会默认从当前路径查找文件
mode:文件的打开模式
r 以只读方式打开文件,如果文件不存在时会打开失败
r+ 在r的基础上,增加写方式打开
w 以只写方式打开文件,如果文件不存在则会创建文件,如果文件已存在,则会先清空再写入
w+ 在w的基础上,增加读方式打开
a 以只写方式打开文件,如果文件不存在则会创建文件,
如果文件已存在,不会清空内容,而是在文件的末尾追加写入数据
a+ 在a的基础上,增加读方式打开
注意:以上方式打开文件,如果没有对应的读写权限都会失败
注意:以上方式默认是文本方式打开文件,在它们的基础上增加b表示以二进制方式打开文件(但是在Linux加不加都没区别)
返回值:文件指针,相当于打开后的文件的凭证
本质上是一个结构指针,但是不需要关心它的成员,如果打开失败会返回NULL

int fclose(FILE *stream);
功能:关闭文件
注意:有时候通过fwrite或者fprintf执行了写入操作,但是文件中没出现内容,可fclose关闭文件让内容直接从缓冲区写入文件
二进制方式读写文件:

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:把一段内存中的数据写入到文件中
ptr:待写入的内存首地址
size:一次写入的字节数
nmemb:写入的次数
stream:文件指针,表示要写入的文件,fopen的返回值
返回值:成功写入的次数
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件中读取数据到内存
ptr:读取到并存入的内存首地址
size:每次读取的字节数
nmemb:读取多少次
stream:文件指针,要从哪个文件读取
返回值:成功读取的次数
练习1:设计一个教师结构(姓名、性别、工号),定义一个教师结构变量并初始化,以二进制方式写该变量到文件中tch.bin
练习2:定义一个教师结构变量,以二进制方式从tch.bin中读取数据到该变量并打印显示

文本方式读写文件:

int fprintf(FILE *stream, const char *format, ...);
功能:以文本形式写入数据到文件中
stream:文件指针
format:"要写入文件的文本内容"
... :变量名列表
返回值:成功写入的字符个数
int fscanf(FILE *stream, const char *format, ...);
功能:以文本形式读取文件到变量中
stream:文件指针
format:"要读取文件的文本内容" 要一一对应
... :变量地址列表
返回值:成功读取到的变量个数

文件位置指针:

每打开一个文件都会有一个文件位置指针记录读写操作的位置,读写操作在Linux中共用同一个位置指针,它会随着读写操作的执行自动往后移动
当以r\r+\w\w+打开文件时,文件位置指针默认在文件的开头
当以a\a+打开文件时,文件位置指针默认在文件的末尾
当想要对文件进行随机位置读写时,可以通过函数手动调整位置指针的位置
int fseek(FILE *stream, long offset, int whence);
功能:设置文件位置指针的位置
offset:偏移值,字节为单位
whence:基础位置
SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件末尾
void rewind(FILE *stream);
功能:设置位置指针到文件开头
long ftell(FILE *stream);
功能:获取当前位置指针的位置
可以借助ftell计算文件大小

文件操作相关其他函数:

int feof(FILE *stream);

功能:检查文件读写位置指针是否到达末尾

返回值:到达末尾结束位置返回非0 ,否则返回0

char *fgets(char *s, int size, FILE *stream);

fgets(str,20,stdin)

功能:从文件中读取一行最大长度size-1个字节的内容

stdin 标准输入文件指针

stdout 标准输出文件指针

stderr 标准错误文件指针

都是操作系统提供并一直打开的文件指针

int fputs(const char *s, FILE *stream);

功能:写入一个字符串到文件中

int remove(const char *pathname);

功能:删除一个文件

返回值:成功返回0 失败返回-1

int rename(const char *oldpath, const char *newpath);

功能:重命名文件

返回值:成功返回0 失败返回-1

命令行参数: argc:命令行参数的个数

包括 ./可执行程序

例如: ./a.out aa bb cc argc==4

argv:存储命令行参数的字符串数组

例如:./a.out aa bb cc

argv[0] == "./a.out"

argv[1] == "aa"

argv[2] == "bb"

argv[3] == "cc"

标签:文件,stream,--,写入,C语言,FILE,size,指针
From: https://www.cnblogs.com/bigflyny/p/17607533.html

相关文章

  • BootstrapBlazor组件库,Menu组件NavLinkMatch导致的多个菜单项被被同时选中
    BootstrapBlazor组件库,Menu组件NavLinkMatch导致的多个菜单项被被同时选中BootstrapBlazor版本更新到7.9.0后,Menu组件出现首页同时被选中的情况默认首页/路径是选中状态,但是当选中其他路径后,首页路径还是选中状态。这是因为在BootstrapBlazor组件最新版中支持了一个新特性。可......
  • 测试
    MLIR具有简单而明确的语法,使其可以可靠地通过文本形式(人类可以读懂并编写的形式)进行往返转换。这对于编译器的开发非常重要,例如用于理解代码在转换过程的一个两个thosdocument......
  • 8/5 kruksal
    最有不限文体#include<bits/stdc++.h>usingnamespacestd;constintN=100;intfa[N];intn,m;inta[1005][1005];structedge{intu,v,w;}e[N*N];boolcmp(edgex,edgey){returnx.w<y.w;}voidInit(intn){for(inti=1;i<=n;i++){......
  • 使用webp格式拯救你的硬盘
    使用webp格式拯救你的硬盘什么是webp格式?WebP是一种现代图像格式,可提供卓越的无损和网络上图像的有损压缩。使用WebP、网站管理员和网络开发人员可以创建更小、更丰富的图像,使Web更快。与PNG相比,WebP无损图像的尺寸小了26%。有损图像比同等SSIM质量指数下的同类JPEG......
  • 新的 Anaconda Web UI 安装程序可能会随 Fedora 工作站 39 一同推出
    导读新的AnacondaWebUI安装程序可能会随Fedora工作站39一同推出。长期以来,Fedora的安装体验一直未曾改变。然而,这个新的WebUI安装程序已经开发了一年多的时间,现在离正式实现的目标更近了。为什么现在是时候了?在我们上次了解即将到来的AnacondaWebUI安......
  • 硬件管理平台-硬件产品库-硬件项目
    硬件管理平台-硬件产品库-硬件项目本篇主要描述的是如何创建一个硬件项目,并将硬件信息进行展示。讲了这么多至少应该能出个效果吧在产品库文件夹中创建一个硬件集合文件夹,该文件夹存放所有硬件项目,在创建硬件项目前我们需要创建某类硬件项目的硬件接口。我们在此以门禁和空......
  • tarjan(dcc-e)
    [冗余路径](395.冗余路径-AcWing题库)考虑无向图的边双连通分量。这个算法也叫Tarjan算法,且与有向图的强连通分量差不多。边双是指图中任意两点间都存在两条不相交的路径(或删去任意一条边后图仍然连通)。桥:切去这条边后,图不连通。由于这是无向图,所以定义中不包含横叉边。......
  • 2023年多校联训NOIP层测试3+「SFCOI-3」Sadness Fan Club Round 3
    2023年多校联训NOIP层测试3T1数列变换\(10pts\)考虑暴力,发现\(f\)数列进行一次变换\(A\),再进行一次变换\(B\)后,恢复成了原数列;\(f\)数列进行一次变换\(B\),再进行一次变换\(A\)后,也恢复成了原数列。即变换\(A\)可以和变换\(B\)相互抵消。本质是差分是前缀......
  • 初学C语言day10--结构体
    结构:struct结构是由程序员自己设计的一种数据类型,用于描述一种事物的各项数据,由若干项不同的基础数据类型组成设计结构类型:struct结构类型名{类型名1成员名1;类型名2成员名2;...};//分号不能少定义结构变量:struct结构类型名结构变量;注意:在C语言中定义结......
  • 俄乌战争中乌克兰的无人机、无人艇的临时操作手——善于玩电子游戏的高手——电玩高手
    看到一个新闻:凌晨450公斤炸弹命中,4000吨级俄军军舰剧烈爆炸:正在逐渐下沉 里面有这么一句话:乌克兰正在高中里搜索那些善于玩电子游戏的高手,让他们操作无人机和无人艇远程袭击俄罗斯目标。   -------------------------------------------------  一个设想:那就是......