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