IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [2021-08-12]C语言入门简明教程第7章-文件操作 -> 正文阅读

[C++知识库][2021-08-12]C语言入门简明教程第7章-文件操作

C语言入门简明教程

0x07 文件操作

写在开头

如果程序没有和环境的交互,就好像七夕时没有男/女朋友的你,文件操作是一种控制台输入输出之外常用的交互的方式。
注意! 文件操作需要用到指针,请仔细阅读指针相关内容!

fopen(filename, mode):打开文件流

使用fopen会返回一个文件指针,指向打开后的文件流。如果打开失败,则返回NULL

FILE *fopen(const char* filename, const char* mode);//fopen
//例:
FILE *fp=fopen("c:\\test.txt","w");

其中,打开模式有多种,这边给出:

模式描述
“r”以只读方式打开文件,文件必须存在
“w”以写方式打开文件,此方式将清除原来内容并重写新内容
“a”以写方式打开文件,追加内容到文件结尾,文件不存在则创建
“r+”打开文件,可读可写,文件必须存在
“w+”创建可读可写的空文件
“a+”打开可读可追加内容的文件

特别地,在英文后面加上字符b会以二进制方式操作,如二进制读为"rb"

fclose(fp):关闭文件流

就像要随手关灯,文件打开完读写完也要关闭文件流。这边我们使用fclose 可以方便地关闭文件流。

int fclose(FILE *fp);

fgetc(fp):从文件流读取一个字符

由于存在文件结尾(EOF, 值为-1),fgetc返回的是一个int值,需要转换为char

int fgetc(FILE *fp);
//例:
while(true){
	int fc=fgetc(fp);
	if(fc==EOF)break;
	putchar((char)fc);
}//读取文件所有内容,已省略文件流的创建和关闭内容

fputc(char, fp):向文件写一个字符

一看就会,就像putchar 一样,只是多一个指向要写入文件的文件指针

int fputc(int c, FILE *fp);

fgets(outstr, n, fp):从文件流读取一行

如果一个个读取字符可能会有点烦,我们可以使用fgets来进行整行的读取:

char* fgets(char *outstr, int n, FILE *fp);
//第一个参数是读取内容所存放的字符串指针,第二个值是将可能读取到的最大字符数量,第三个是文件指针
//如果读取成功,则返回outstr指针,否则返回NULL

fputs(str, fp):向文件写入字符串

fputs将向文件写入一个字符串,但不包括\0的空字符

int fputs(char *str, FILE *fp);
//写入失败则返回EOF

fprintf和fscanf:格式化文件读取、写入

相较于前面的读写方法,fprintf和fscanf提供了更方便的、就像printf和scanf一样好用的文件读取和写入方式。

int fprintf(FILE *fp, const char* format, ...);
//就像printf一样,只是第一个参数是文件指针,然后才是格式化字符串和参数列表
int fscanf(FILE *fp, const char* format, ...);
//就像scanf,第一个参数同样为文件指针

fflush(fp):清空缓冲区

如果文件为写状态,写的内容在关闭前都在内存的缓冲区,为了避免不必要的浪费,我们使用fflush将内容写道磁盘上的文件里并清空缓冲区。

int fflush(FILE *fp);

rewind(fp):将文件指针指回文件开头

一看就会:

void rewind(FILE *fp);

fseek(fp, offset, origin):移动文件流指针

有时候我们不需要从头读写文件,于是我们可以使用fseek来修改开始位置和偏移量,做到更高效地读写文件。

int fseek(FILE *fp, long offset, int origin );
//fp为文件流指针,offset为当前指针偏移位置,origin为指针开始的位置
起始点常量名
文件开头SEEK_SET
当前位置SEEK_CUR
文件末尾SEEK_END

因此当origin为SEEK_SET时将从文件开头偏移offset的位置开始读写;
SEEK_CUR将从当前已经到的位置偏移offset位置开始,SEEK_END则从结尾偏移offset。
注意: offset可为负值,可以在一个位置向前移动文件指针。

ftell(fp):返回当前文件指针所在位置

返回值是一个long,为当前位置离开头的偏移字节数

long ftell(FILE *fp);

freopen(filename, mode, stream):重定向文件流

有时候我们只需要向文件写入,而多打一个f有时候会让我们觉得很烦,通过重定向到stdin(标准输入流)、stdout(标准输出流)、stderr(标准错误)可以方便地读取写入。

 FILE *freopen(const char *filename, const char *mode, FILE *stream);
 //例子:
 if(freopen("out.txt","w",stdout)==NULL)printf("freopen failed.\n");//重定向失败
else{
	printf("succeeded.\n");//相当于像文件里面写入了succeeded.
	//将重定向改为读取模式并将重定向流改成stdin还可以用scanf读取文件内容
}

remove(filename):删除文件或目录

有时候要删掉一个没用的文件比如刚刚的浏览器历史记录文件或者学习资料文件夹,这时候就可以使用remove方便地删除:

int remove(const char* filename);
//成功返回0,失败返回-1

总结

文件挺好玩的,就是这样~
EOF

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 11:45:37  更:2021-08-13 11:46:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 7:02:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码