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

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"

posted @   BigBig飞  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示