运维开发网

c语言超详细文件操作基础第1部分

运维开发网 https://www.qedev.com 2022-09-27 16:28 出处:网络
这篇文章主要为大家详细介绍了C语言的文件操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

这篇文章主要为大家详细介绍了C语言的文件操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助


一、为什么使用文件

为了更好的记录信息,长期保存数据,这个时候我们可以把数据写入一个文件。通过使用文件,我们可以将数据直接存储在计算机的硬盘上,从而实现数据的持久性。


二、什么是文件

磁盘上的文件是文件。

但在编程中,我们一般讲两种文件:程序文件和数据文件(从文件功能的角度分类)。


1.什么是数据文件

你的程序正在读写一个文件,这个文件叫做数据文件。我可以从这个文件中读取一些数据到我的程序中,也可以把程序中的数据写到一个文件中,这个文件叫做数据文件。

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


2.什么是程序文件

包含源文件(后缀。c)、目标文件(后缀。windows环境下的obj)和可执行程序(后缀。windows环境下的exe)。


3.文件名

一个文件应该有一个唯一的文件标识,以便用户可以识别和引用它。

文件名包含三部分:文件路径+文件名主干+文件后缀。

示例:c:\code\test.txt

为方便起见,文件标识通常称为文件名。


三、文件的打开和关闭


1 文件指针:

假设我们创建了一个test.dat的文件,我们打开这个文件进行操作,写一些相应的信息或者删除一些相应的信息,都属于文件操作的行为。在操作过程中,文件的相关信息会发生变化。我们如何记录这些变化?每个打开的文件都有一个与文件本身相关联的文件信息区。只要文件发生变化,文件信息区也会随之变化。在信息区域中,维护有关当前文件的信息,例如文件名、文件状态和文件的当前位置。这个文件信息区是一个结构变量,一个名为FILE的结构。用file的结构创建一个结构变量,这个变量的memory 空存储与这个文件相关的信息。

画画正在加深理解:


在缓冲文件系统中,关键概念是ldquo类型指针rdquo,简称ldquo文件指针rdquo。

每个被使用的文件在内存中都有一个对应的文件信息区,用来存储文件的相关信息(如文件的名称、状态和当前位置等。).这些信息存储在一个结构变量中。结构类型被系统地声明并命名为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 * pf//文件指针变量

Pf是一个指针变量,指向文件类型的数据。你可以让pf指向一个文件的文件信息区(这是一个结构变量)。可以通过文件信息区中的信息访问该文件。也就是说,可以通过文件指针变量找到与之关联的文件。

例如:



2.打开和关闭文件函数


(1)打开文件函数:


函数的返回类型是FILE *。当你用fopen打开这个文件时,你会主动创建一个信息区,并返回文件信息区的起始地址,这是一个指向FILE *的指针。

FILE *fopen( const char *filename,const char * mode);

文件名,//文件名

模式//如何打开文件

打开文件的方式:


(2)关闭文件函数


现在让我们编写代码来演示如何打开和关闭文件:

#includelt;stdio.hgt;int main(){FILE *pf = fopen("test.dat", "r");//fopen函数如果以写的形式打开,如果文件不存在会创建一个文件,如果文件存在,会清空文件的内容,如果是已读的方式打开,文件不存在的话会打开失败,返回空指针if (pf == NULL)//如果打开文件失败会返回空指针{perror("foopen");return 1;}//写文件//关闭文件fclose(pf);pf = NULL; return 0;}


四、文件的顺序读写

c语言程序,只要运行,默认打开三个流。

标准输入流-键盘

标准输出流屏幕

标准错误流屏幕


下面我们来进行文件的相关操作:



1.写文件 (fputc,操作一个字符)


#includelt;stdio.hgt;int main(){FILE *pf = fopen("test.dat", "w");if (pf == NULL)//如果打开文件失败会返回空指针{perror("foopen");return 1;}//写文件fputc('b', pf);fputc('i', pf);fputc('t', pf);//关闭文件fclose(pf);pf = NULL; return 0;}

在W模式下打开,即使里面有内容也会被清除空。


2.读文件(fgetc,操作一个字符)


#define _CRT_SECURE_NO_WARNINGS 1#includelt;stdio.hgt;int main(){FILE *pf = fopen("test.dat", "r");if (pf == NULL)//如果打开文件失败会返回空指针{perror("foopen");return 1;}//读文件int ret = fgetc(pf);//返回的是ASCII//读取失败返回EOFprintf("%c", ret); //关闭文件fclose(pf);pf = NULL; return 0;}

Fgetc在读取文件流中的数据后将读取-1。


3.写文件(fputs,操作字符串)


#includelt;stdio.hgt;int main(){FILE *pf = fopen("test.dat", "w");if (pf == NULL)//如果打开文件失败会返回空指针{perror("foopen");return 1;}//写文件,按行来写fputs("abcdef",pf);fputs("desfgf",pf); //关闭文件fclose(pf);pf = NULL; return 0;}


4.读文件(fgets,操作字符串)


#includelt;stdio.hgt;int main(){char arr[10] = { 0 };FILE *pf = fopen("test.dat", "r");if (pf == NULL)//如果打开文件失败会返回空指针{perror("foopen");return 1;}//读文件fgets(arr, 4, pf);printf("%s", arr); //关闭文件fclose(pf);pf = NULL; return 0;}

在读取文件数据时,如果他读取4,他不会真的读取4。读完3,他还是要离开a /0位置。

未完成。。。。。。

至此,本文对基于C语言的超详细文件操作已经介绍到这里。关于C语言文件操作的更多内容

0

精彩评论

暂无评论...
验证码 换一张
取 消