CSDN的各位友友们你们好,今天千泽为大家带来的是

C语言详解-文件操作篇,

接下来让我们一起了解一下JAVA的学习路线吧!

如果对您有帮助的话希望能够得到您的支持和关注,我会持续更新的!

一.文件的概念

计算机文件,是存储在某种长期储存设备或临时存储设备中的一段数据流,并且归属于计算机文件系统管理之下。所谓“长期储存设备”一般指磁盘、光盘、磁带等。而“短期存储设备”一般指计算机内存

使用文件的好处:

使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。

文件分为两种:

程序文件
源程序文件(后缀.c等),目标文件(Windows环境下后缀为.obj),可执行程序(Windows环境下为.exe),预处理文件(.i),汇编文件(.b)

数据文件
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行时需要从中读取数据的文件

文件名

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

文件名包含3部分:文件路径;文件名主干;文件后缀

例如:c:\code\test.txt

二. 文件的基本操作

文件的打开和关闭

当我们使用代码对文件进行操作时,每一个被使用的文件都在内存开辟了一个相应的文件信息区,用来存放文件的相关信息(文件名、文件的状态、文件当前的位置等),注意:文件信息区存放的不是文件中的内容,但是可以通过文件信息区维护该文件。文件信息区本质上是一个结构体变量。结构体类型是由系统定义的,取名FILE

在VS2013编译环境提供的stdio.h头文件中文件有以下的文件类型声明

​typedef struct _iobuf {char *_ptr;int _cnt;char *_base;int _flag;int _file;int _charbuf;int _bufsiz;char *_tmpfname; }FILE;FILE* pf//文件指针变量

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变 量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到并维护与它关联的文件

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

#inlcude int main(){//打开文件FILE* pFile = fopen("test.c", "w");//关闭文件fclose(pFile);return 0;

当我们打开文件时,会自动创建一个文件信息区,此时我们可以定义一个文件指针指向创建的文件信息区,打开文件时,会返回一个FILE* 的指针指向开辟的文件信息区。这有点像动态开辟时伴随着内存中会创建一段内存空间,返回这段空间的起始地址。
在文件操作完之后我们应该关闭文件,释放文件信息区,这有点像动态开辟结束后需要释放掉动态开辟的空间
ANSIC 规定使用fopen函数来打开文件,fclose函数来关闭文件pFile

三.文件读写所用的函数

接下来,我们一起来看一下官方的讲解

返回指定流的内部文件位置指示器当前指向的字符。然后内部文件位置指示器前进到下一个字符。
如果流在调用时位于文件末尾,则该函数返回 EOF 并设置流的文件末尾指示符 (feof)。
如果发生读取错误,函数返回 EOF 并设置流的错误指示符 (ferror)。
fgetc 和 getc 是等价的,除了 getc 可能在某些库中实现为宏。
函数的返回值设置为int类型为了适应返回失败后EOF的值

向流中写入一个字符并推进位置指示器。

字符写在流的内部位置指示器指示的位置,

然后自动前进一个位置成功时,返回写入的字符。

如果发生写入错误,则返回 EOF 并设置错误指示符 (ferror)。

从流中读取字符并将它们作为 C 字符串存储到 str 中,直到读取 (num-1) 个字符或到达换行符或end of file,以先发生者为准。
换行符使 fgets 停止读取,但函数认为它是有效字符并包含在复制到 str 的字符串中。
在复制到 str 的字符之后自动附加终止空字符。
fgets 与 gets 不同点:fgets 不仅接受流参数,而且还允许指定 str 的最大大小,并在字符串中包含任何结束换行符。
如果在尝试读取字符时遇到文件结尾,则会设置 eof 指示符 (feof)。如果这发生在可以读取任何字符之前,则返回的指针是一个空指针(并且 str 的内容保持不变)。
成功输出返回指向str的指针
如果发生读取错误,则设置错误指示符(ferror)并返回空指针(但 str 指向的内容可能已更改)。

函数从str指向的位置复制字符到stream所指向的位置直到遇见了结束符’\0′,结束符不会被复制到stream流里
fputs与puts不同:fputs需要指定参数流,而且fputs不会像流中添加额外的字符,但是puts会添加一个换行符
如果成功输出,返回非负数
如果输出失败,返回EOF

从流中读取 count 个元素的数组,每个元素的大小为 size 个字节,并将它们存储在 ptr 指定的内存块中。
流的位置指示符按读取的字节总数提前。
如果成功,读取的总字节数是 (size*count)
如果此数字与计数参数不同,则表明发生读取错误或读取时已到达文件末尾。在这两种情况下,都设置了正确的指示符,可以分别使用 ferror 和 feof 检查。
如果 size 或 count 为零,则函数返回零并且流状态和 ptr 指向的内容都保持不变。

从 ptr 指向的内存块到流中的当前位置写入一个包含 count 个元素的数组,每个元素的大小为 size 字节。
流的位置指示符按写入的字节总数提前。
在内部,函数将 ptr 指向的块解释为 unsigned char 类型的 (size*count) 个元素的数组,并将它们按顺序写入流,就像为每个字节调用 fputc 一样。
如果成功,写入的总字节数是 (size*count)
如果此数字与计数参数不同,则写入错误会阻止函数完成。在
情况下,将为流设置错误指示器 (ferror)。
如果 size 或 count 为零,则函数返回零并且流状态和 ptr 指向的内容都保持不变。

今天的分享先到这里,关于文件操作相关知识还会有下篇的!