C语言之文件基本知识

一、文件的介绍

1.1 文件分类

在程序设计中,从文件的功能分类可以分为程序文件和数据文件。

程序文件:包括源文件(.c)、目标文件(.obj)、可执行文件(.exe)。

数据文件:程序运行时读写的文件。

1.2 文件路径

在C语言中,处理文件路径通常涉及到在程序中指定文件的位置,以便可以打开、读取、写入或执行其他文件操作。文件路径可以是相对路径或绝对路径。

绝对路径

绝对路径是从根目录(或顶级目录)开始到文件所在位置的完整路径。它包含所有必要的目录和子目录,以及文件名本身。绝对路径在不同的操作系统中可能有所不同:

  • 在Windows中,绝对路径可能类似于C:\Users\YourName\Documents\file.txt
  • 在Unix/Linux/macOS中,绝对路径可能类似于/home/yourname/documents/file.txt

相对路径

相对路径是相对于当前工作目录的路径。如果你在一个程序中指定了一个相对路径,那么文件将被假定为位于程序当前工作目录的某个子目录中,或者就在当前工作目录中。

  • 例如,如果你的程序当前工作目录是/home/yourname/projects,并且你指定了一个相对路径./data/file.txt(其中.代表当前目录),那么程序将尝试打开/home/yourname/projects/data/file.txt

1.3 文件名 

在C语言中,文件名是指用于标识和引用存储在文件系统中的文件的字符串。这个字符串可以是绝对路径或相对路径,但无论哪种情况,它最终都指向一个具体的文件。文件名通常包括三部分:文件路径+文件名主干+文件后缀。

注意事项

  • 当在C程序中指定文件名时,请确保路径和文件名正确无误,并且文件确实存在于指定的位置。
  • 在Windows上,路径分隔符是反斜杠(\),但在C字符串中,反斜杠是一个转义字符的开始。因此,你需要使用双反斜杠(\\)来表示一个实际的反斜杠字符。或者,你可以使用正斜杠(/),它在Windows上也被接受为路径分隔符。

二、文件的打开和关闭 

2.1 文件指针

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。

vs2013编译环境提供的stdio.h头文件中有以下文件类型申明:

struct _iobuf {
    char *_ptr;
    int _cnt;
    char *_base;
    int _flag;
    int _file;
    int _charbuf;
    int _bufsiz;
    char *_tmpfname;
};
typedef struct _iobuf FILE;
        不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。
        每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。
        一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。下面我们可以创建一个FILE*的指针变量:FILE* pf
        定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。

下面这个图片希望可以帮助大家理解:

2.2 文件的打开和关闭 

在C语言中,文件的打开和关闭是通过标准I/O库中的函数来完成的。这些函数定义在stdio.h头文件中,使得程序能够执行文件操作,如打开、读取、写入和关闭文件。

2.2.1 文件的打开

文件打开操作是通过fopen函数来完成的,函数原型为FILE *fopen(const char *filename, const char *mode),第一个参数是指所要打开的文件的名称,第二个参赛是文件打开方式,如果文件成功打开,fopen将返回一个指向FILE对象的指针,该对象用于后续的文件操作。如果文件打开失败(例如,因为文件不存在或没有足够的权限),则返回NULL。

文件的打开有以下几种:

  1. 只读模式
    • "r":以只读方式打开文件。文件必须存在。
    • "rb":以二进制只读方式打开文件。文件必须存在。
  2. 只写模式
    • "w":以只写方式打开文件,如果文件存在则长度被截断为零,即该文件内容会消失。如果文件不存在则创建该文件。
    • "wb":以二进制只写方式打开文件,同上。
  3. 追加模式
    • "a":以追加方式打开文件。如果文件不存在,将会创建该文件。如果文件存在,写入的数据会被追加到文件末尾,即文件原有内容不会被覆盖。
    • "ab":以二进制追加方式打开文件,同上。
  4. 读写模式
    • "r+":以读写方式打开文件。该文件必须存在。
    • "rb+":以二进制读写方式打开文件,该文件必须存在。
    • "w+":以读写方式打开文件,如果文件存在则文件长度被截断为零,即该文件内容会消失。如果文件不存在则创建该文件。
    • "wb+":以二进制读写方式打开文件,同上。
    • "a+":以读写方式打开文件,该文件可以是存在的或不存在的。写操作将数据追加到文件末尾,但读操作可以从文件的开头开始。
    • "ab+":以二进制读写方式打开文件,同上。
  5. 特殊模式(并非所有系统都支持):
    • "x":以独占方式创建文件并以写模式打开该文件。如果文件已存在,则fopen调用失败并返回NULL
    • "xb":以二进制独占方式创建文件并以写模式打开该文件,同上。

2.2.2 文件的关闭

文件关闭操作是通过fclose函数来完成的。fclose函数的原型为:int fclose(FILE *stream)

stream 是指向FILE对象的指针,该对象标识了要关闭的文件。

fclose函数会关闭与stream相关联的文件,并释放所有与之相关的资源。如果成功,fclose返回0;如果失败,则返回EOF(通常是一个在stdio.h中定义的宏,表示文件结束或错误)。

  • 51
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值