使用FILE结构操作文本文件(文件实训)

编写函数,该函数从已有的当前目录下的文件a.txt中读取并解析出其中的数值,并将结果写到当前目录下的文件b.txt中。

相关知识

文件文件是存储在某种长期储存设备(磁盘、光盘等)上的一段数据流。C 语言中把文件看成一个有序的字节流,每个文件都以文件结束标志( EOF )结束。
下图是包含 n 个字节的文件内容:
在这里插入图片描述
磁盘文件由操作系统中的文件系统统一管理,也只有文件系统才能直接操作文件。所以编写 C 程序来操作文件实际上是需要调用文件系统的接口函数来进行,我们学习文件的操作也就是学习一些 C 语言库中提供的函数。是不是感觉好简单啊:-)。

文件类型

C 语言在对文件进行操作时,将文件分为文本文件和二进制文件。

  1. 文本文件:指可以用任何文字处理程序阅读和编辑的简单 ASCII 文件;
  2. 二进制文件:指一般含有特殊的格式或计算机代码,如图形文件和可执行文件等。
文件的操作

C 语言中对文件的操作一般分为三个步骤:打开文件、读写文件、关闭文件。

打开文件

打开文件后,操作系统为文件建立一个文件控制结构(文件控制块),并在内存中建立一个缓冲区,该缓冲区的数据对应文件的数据,之后的文件读写操作实际上是在缓冲区中进行。

读写文件

通过文件控制块实现文件的输入输出。

关闭文件

将文件缓冲区中的数据写回到磁盘文件中,并释放文件控制块。
操作文件的函数用 FILE 结构操作文件是 C 语言提供的文件操作方式,只要包含头文件stdio.h就能使用文件操作的相关函数。下面就给大家介绍一些函数的使用。

打开文件

fopen 是stdio.h提供的文件打开函数。
如下面的程序可以打开一个文件用于读:

#include <stdio.h>
FILE *fp = fopen("a.txt","r");  // 打开一个供读取数据的文件a.txt。

其中函数的第一个参数是拟打开文件的路径和名字,可以包含相对路径或者绝对路径,如上面程序中就是打开当前目录下的a.txt文件。第二个参数是打开方式,fopen函数可以使用的打开方式如下表:

打开方式 描述
r 打开一个供读取数据的文件
w 建立或打开一个供写入数据的文件,如果该文件已经存在,则废弃文件内容
a 建立或打开一个供写入数据的文件,如果文件已经存在,则写入的数据将追加到文件的尾部
r+ 打开一个已存在的文件,该文件可以写入和读出数据
w+ 建立或打开一个可供读和写的文件,如果文件已存在,则废弃文件内容
a+ 建立或打开一个可供读和写的文件,如果文件已存在,则写入的数据追加到文件的尾部
b 打开一个二进制文件

如果文件打开成功,函数 fopen 将返回一个指向 FILE 结构的指针,该指针指向的 FILE 结构管理了被打开的那个文件。
如果文件打开失败(如打开一个不存在的文件用于读),那么该函数将返回 NULL。上面的程序将返回值赋值给FILE*的指针 fp ,之后就可以通过 fp 来操作打开的文件了。

读写文件
  1. 从文本文件中读取一个字符可以使用 fgetc 函数:
int fgetc(FILE *stream);

该函数表示从文件指针 stream 指向的文件的当前位置读取一个字符,并以 int 类型返回。

  1. 从文本文件读取一行可以使用 fgets 函数:
char *fgets(char *string, int n, FILE *stream);

该函数表示从文件指针 stream 指向的文件的当前位置开始读取字符串,直到遇到换行符(读入该换行符),或到达文件结束位置,或读取了 n-1 个字符。读取的字符串存入 string 所指的内存单元中,并在所有读取的字符之后添加字符串结束标记\0。
如果读取成功,函数返回 string,如果出错或读取前已经到达了文件结束的位置,将返回 NULL。

  1. 从文本文件中进行格式化读取可以使用 fscanf 函数:
int fscanf(FILE *stream, const char *format [,argument].
### Linux 文件的创建与删除操作 #### 创建文件的方法 在 Linux 中有多种方式可以创建新文件。以下是几种常见的方法: 1. **`touch` 命令** 使用 `touch` 可以快速创建一个空文件,如果文件已存在,则更新其时间戳而不改变内容。 ```bash touch filename.txt ``` 2. **重定向符 (`>`)** 利用重定向符也可以轻松创建文件并清空原有内容(如果有)。注意此操作会覆盖已有文件的内容。 ```bash > newfile.txt ``` 3. **`echo` 命令配合重定向** 将字符串写入文件的同时完成文件的创建过程。 ```bash echo "This is a test." > example.txt ``` 4. **`dd` 工具** 这是一种更灵活的方式,尤其适合于生成特定大小的数据块文件[^2]。 ```bash dd if=/dev/zero of=largefile.bin bs=1M count=100 ``` 5. **文本编辑器如 vi/vim** 所有的类 Unix 系统都预装了 Vi/Vim 编辑器,通过它可以直接新建文档[^4]。 ```bash vim document.md ``` #### 删除文件操作 对于不再需要的文件,可以通过以下手段移除它们。 1. **单个文件的删除——`rm` 命令** 最基本也是最常用的命令之一就是 `rm`, 它能够永久性地销毁目标对象,请务必小心使用以免造成不可逆损失。 ```bash rm file_to_remove.txt ``` 2. **强制模式下的批量清理——加上 `-f` 参数** 当面对只读属性或者其他权限限制时,附加 `-f` 标志可忽略提示强行执行动作。 ```bash rm -f stubborn_file.log ``` 3. **递归清除目录及其内部成员——启用 `-r` 或者 `-R` 开关** 若要彻底消除某个子树结构连同其中的所有条目一起抹去的话,则需要用到带有递归选项的形式。 ```bash rm -rf entire_directory/ ``` 需要注意的是,在实施任何破坏性的行动之前应当确认当前工作路径正确无误,并且最好先备份重要资料以防万一发生意外情况[^1]。 ```python import os # Python脚本示例:安全地删除指定路径中的所有.pyc编译缓存文件 def clean_pyc(directory): for root, dirs, files in os.walk(directory): for name in files: if name.endswith('.pyc'): pyc_path = os.path.join(root, name) try: os.remove(pyc_path) print(f"Deleted {pyc_path}") except Exception as e: print(e) clean_pyc('/path/to/project') ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【执珪】瑕瑜·夕环玦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值