文件 :存在硬盘U盘 外存中(外部介质) 的 数据的集合
输入输出 : 数据流,信息从源到端的流动 (stream)
磁盘->程序:读文件(站在程序的角度)
程序->磁盘:写文件
//linux:万物皆为文件(包括键盘 显示器)
文件总路径 : D:\CC\temp\file1.dat
文件路径 D:\CC\temp
绝对路径
相对路径
文件名主干 file1
文件后缀 .dat
数据文件:
ASCII码文件 : 文本文件,对应字符转化为ASCII码 12 ->'1' '2'
二进制文件 : 不进行修改,存入磁盘当中 12->12
//文件缓冲区:(待补充)
文件操作三部曲 :
1.打开一个文件:fopen ->fopen();//文件结构体为空:失败
以Mode方式打开一个文件:Mode:
⚪文本文件:
⭐只读权限:
'r', 打开一个用于读取的文本文件,要求文件必须存在,不存在会报错
'w':文件不存在,创建一个文件,文件存在,清空该文件
'a':文件不存在,创建一个文件,文件存在,追加一个文本文件
⭐增加了写权限:
'r+':文本文件
⚪二进制文件:
'rb':二进制文件
1-0. 修改文件
fread 读:
fwrite 写:
2.读写一个文件: r w ->fprintf();把数据写入到磁盘
printf : "..."转化为字符串 结果写入->显示屏
fprintf : 转化为字符串 结果写入->磁盘(文件)
sprintf : 转化为字符串 结果写入->buff(缓冲区) (字符串长度)
// 返回为int型:字符串长度
3. 关闭一个文件:fclose ->fclose
指针置空 pf = NULL;
三部曲第一步:打开一个文件(找到/新建/追加等)
1.fopen(); 读取文件---输入流
fopen();
语法:FILE *fopen( const char *fname, const char *mode );
示例: FILE *input = fopen( "stuff", "r" );
理解:打开由fname(文件名),返回一个关联该文件的流
mode(方式)决定了文件的操作方式(r,w,a,rb,wb,ab
r+,w+,a+,rb+,wb+,ab+)
如果发生错误, fopen()返回NULL;
源码:
三部曲可选步:修改文件
1-0. fwrite 写+ fread 读
三部曲第二步:读写这个文件
2.fprint(); 把数据写入磁盘(显示器/缓冲区等) ---输出流
fprintf();
语法:int fprintf( FILE *stream, const char *format, ... );
示例: FILE *out;
out = fopen( "output.txt", "w" );
理解:根据指定的format(格式)方式,发送信息到stream(流)指定的文件(显示屏)
fprintf()的返回值是输出的字符数,发生错误时返回一个负值.
源码:
sprintf();
语法:int sprintf( char *buffer, const char *format, ... );
示例: sprintf( string, "file.%d", file_number );
理解:根据指定的format(格式)方式,发送信息到stream(流)指定的文件(缓冲区)
区别:和fprintf()类似, 只是把输出发送到buffer(缓冲区)中.返回值是写入的字符数量
源码:
三部曲第三步:关闭这个文件
3.fclose();---关闭流
fclose();
语法:int fclose( FILE *stream );
举例:FILE *pf = fopen("yhp.txt","w");
fclose(pf);//我原本指向的数据块 现在不指了
pf = NULL; 类似于malloc 释放那块
理解:函数fclose()关闭给出的文件流, 释放已关联到流的所有缓冲区.
fclose()执行成功时返回0,否则返回EOF.
注意事项:最后一定要让pf置空,不然会存在很大隐患