文件操作详解

目录

1.为什么使用文件?

2.什么是文件?

2.1程序文件

2.2数据文件

2.3文件名

3.二进制文件和文本文件

3.1二进制文件

3.2数据文件

3.3二进制文件 vs 数据文件

4.文件的打开和关闭

4.1流和标准流

4.1.1流(Stream)

4.1.2标准流(Standard Streams)

4.2文件指针

4.3文件的打开和关闭


1.为什么使用文件?

        如果没有文件。我们所写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就会被丢失,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,就需要使用相关的文件操作了。

2.什么是文件?

        在计算机科学中,文件是存储在辅助存储设备(如硬盘驱动器、固态硬盘、光盘等)上的一组相关信息的集合。文件是操作系统管理数据的基本单位,它可以包含文本、图像、声音、视频或其他任何类型的数据。

文件通常由以下部分组成:

  1. 数据:文件的内容,可以是文本、图像、音频、视频或其他二进制数据。

  2. 文件名:用于标识文件的字符串,通常包括主文件名和扩展名(如 “document.txt” 中的 “document” 是主文件名,“txt” 是扩展名)。

  3. 属性:文件的一些元数据,如创建日期、最后修改日期、文件大小、文件所有者、访问权限等。

  4. 文件类型:根据文件的内容和用途,文件可以被分类为不同的类型,如文本文件、可执行文件、图像文件等。

  5. 路径:文件在文件系统中的位置,通常包括目录的层次结构。

        文件可以被创建、读取、写入、复制、移动和删除。操作系统提供了文件系统来管理这些文件,文件系统负责文件的存储、检索和组织。在编程中,文件操作是指程序对文件执行的各种操作,如打开文件、读取文件内容、写入数据到文件、关闭文件等。这些操作允许程序与用户和其他程序交换信息,并实现数据的持久化存储。

2.1程序文件

        程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。

2.2数据文件

        文件的内容不一定是程序,而是程序运行的数据,比如程序运行需要从中读取的文件,或者输出内容的文件。

        在以前各章所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上文件。

2.3文件名

        一个文件要有一个唯一的文件标识,以便用户识别和引用。

文件名包括3部分:文件路劲+文件名主干+文件后缀

为了方便起见,文件标识被称为文件名。

3.二进制文件和文本文件

        在计算机科学中,文件通常根据它们包含的数据类型和用途被分类。二进制文件和数据文件是两种常见的文件类型,它们有各自的特点和用途。

3.1二进制文件

        二进制文件是一种包含二进制数据的文件,即由0和1组成的计算机可以直接理解和执行的数据。二进制文件通常用于存储程序指令、图像、音频、视频等非文本数据。它们是计算机硬件和软件通信的桥梁,因为计算机的处理器直接操作二进制指令。

二进制文件的特点包括:

  • 机器编码:数据以特定计算机架构的机器语言编码,直接被CPU执行。
  • 不可读性:由于数据以二进制形式存储,因此无法直接用文本编辑器查看和编辑。
  • 高效:二进制数据通常比文本表示更加紧凑,可以节省存储空间和处理时间。

3.2数据文件

        数据文件是一种包含数据的文件,这些数据通常是用户或应用程序用于存储信息的,如配置设置、用户数据、统计信息等。数据文件可以是文本格式,也可以是二进制格式。

数据文件的特点包括:

  • 可读性:文本格式的数据文件可以直接用文本编辑器打开和编辑。
  • 结构化:数据文件通常具有一定的结构,如CSV、JSON、XML等,便于程序解析和处理。
  • 便携性:文本格式的数据文件更容易在不同的系统和应用程序之间交换。

3.3二进制文件 vs 数据文件

尽管二进制文件和数据文件都是用于存储数据的,但它们的用途和操作方式有所不同:

  • 二进制文件主要用于存储程序指令和多媒体数据,它们通常需要专门的软件或程序来解释和执行。
  • 数据文件主要用于存储配置信息、用户生成的内容和其他程序使用的数据。它们可以被文本编辑器读取,也可以被特定程序解析和处理。

在实际应用中,开发者会根据需要选择使用二进制文件还是数据文件。例如,对于需要快速访问和处理的复杂数据结构,二进制文件可能是更好的选择,因为它们可以直接在内存中表示,而不需要额外的解析步骤。而对于需要跨平台共享和编辑的数据,文本格式的数据文件可能更合适。

4.文件的打开和关闭

4.1流和标准流

4.1.1流(Stream)

        我们的程序的数据需要输出到各种外部设备,也需要从外部设备获取,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,流这个概念被抽象出来。

        在计算机科学中,流(Stream)是一个抽象概念,用于描述数据的流动。它类似于水流或电流,数据在流中从源头传输到目的地。流可以是从输入设备到计算机的输入流,也可以是从计算机到输出设备的输出流。流的概念在编程语言中非常重要,因为它提供了一种统一的方式来处理不同类型的输入和输出,如文件、网络连接和设备。

4.1.2标准流(Standard Streams)

标准流是一组在大多数操作系统环境中预定义的输入/输出流,它们分别是:

  1. 标准输入(Standard Input,stdin):通常指的是键盘输入,程序可以从这里读取用户输入的数据。

  2. 标准输出(Standard Output,stdout):通常指的是显示器输出,程序可以将信息输出到这里显示给用户。

  3. 标准错误(Standard Error,stderr):也是显示器输出,但用于输出错误信息。与标准输出分开的好处是,错误信息不会与正常输出混合,便于用户识别和调试。

这些标准流在命令行界面(CLI)中尤为重要,因为它们允许用户与程序交互,并且程序可以将结果反馈给用户。在许多编程语言中,包括C语言,标准流是通过标准库中的文件指针访问的,例如 stdinstdoutstderr

在C语言中,标准流是通过预定义的文件指针来访问的,它们分别对应于文件描述符0、1和2。例如,printf 函数会将数据写入标准输出(stdout),而 scanf 函数会从标准输入(stdin)读取数据。

标准流的一个关键特性是它们可以被重定向。在命令行中,用户可以将标准输入重定向到一个文件,将标准输出或标准错误重定向到另一个文件,从而改变程序的数据来源和输出目标。这种功能使得命令行工具和网络实用程序变得非常强大和灵活。

4.2文件指针

        在C语言中,文件指针是一个指针变量,它用于访问与文件相关的信息,并且用于对文件进行读取、写入和其他操作。文件指针通常指向一个FILE结构体,该结构体包含了文件的状态信息和文件操作函数所需的上下文。

        FILE结构体由C语言的标准库定义,它的具体实现细节依赖于操作系统和编译器。这个结构体包含了如文件描述符、当前读写位置、错误标志、缓冲区等信息。

4.3文件的打开和关闭

        文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。

        在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

ANSIC规定使用fopen打开,fclose来关闭文件。

        在C语言中,使用`fopen`函数打开文件时,可以指定不同的模式(mode)来控制文件的访问权限和操作。以下是一些常用的文件打开模式:
1. **"r"**:以只读方式打开文件,文件指针位于文件的开头。如果文件不存在,`fopen`会返回NULL。
2. **"w"**:以写入方式打开文件,如果文件已存在,则将其截断为0长度;如果文件不存在,则创建新文件。文件指针位于文件的开头。
3. **"a"**:以追加方式打开文件,如果文件不存在,则创建新文件。文件指针位于文件的末尾,写入的数据会被追加到文件的末尾。
4. **"r+"**:以读写方式打开文件,文件指针位于文件的开头。如果文件不存在,`fopen`会返回NULL。
5. **"w+"**:以读写方式打开文件,如果文件已存在,则将其截断为0长度;如果文件不存在,则创建新文件。文件指针位于文件的开头。
6. **"a+"**:以读写方式打开文件,如果文件不存在,则创建新文件。文件指针位于文件的末尾,写入的数据会被追加到文件的末尾,但读取操作可以从文件的开头开始。
7. **"rb"**、**"wb"**、**"ab"**、**"rb+"**、**"wb+"**、**"ab+"**:与上述模式相同,但是用于二进制文件。在大多数现代操作系统和编译器中,文本模式和二进制模式没有区别,但是在某些旧的系统上,它们可能会对换行符的处理有所不同。
8. **"x"**:与"`w`"或"`w+`"类似,但如果文件已存在,则`fopen`会失败并返回NULL。这可以用于避免意外覆盖现有文件。
9. **"bx"**、**"xb"**:与"`x`"模式结合使用,用于二进制文件。
10. **"cx"**、**"xc"**:与"`a`"或"`a+`"类似,但如果文件不存在,则`fopen`会失败。这可以用于确保只追加到已存在的文件。
11. **"tx"**、**"xt"**:与"`x`"模式结合使用,用于文本文件。
        请注意,不是所有的编译器和操作系统都支持上述所有模式,特别是在不同的平台上,对文件模式和行为的支持可能会有所不同。因此,在使用这些模式时,最好参考你所使用的编译器和操作系统的文档。

实例代码:

  • 60
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值