仿第四城地方门户网站模板,网站开发团队要几个人,公司为什么建立网站,网站制作公司兴田德润i在哪里前言#xff1a;我们在学习C语言的时候会发现在编写一个程序的时候#xff0c;数据是存在内存当中的#xff0c;而当我们退出这个程序的时候会发现这个数据不复存在了#xff0c;因此我们可以通过文件把数据记录下来#xff0c;使用文件我们可以将数据直接存放在电脑的硬盘…前言我们在学习C语言的时候会发现在编写一个程序的时候数据是存在内存当中的而当我们退出这个程序的时候会发现这个数据不复存在了因此我们可以通过文件把数据记录下来使用文件我们可以将数据直接存放在电脑的硬盘上做到了数据的持久化。 博主CSDN主页:卫卫卫的个人主页 专栏分类:C程序设计谭浩强版本 代码仓库:卫卫周大胖的学习日记 关注博主和博主一起学习!一起努力 目录 什么是文件程序文件数据文件 文件名文件的打开和关闭文件指针 文件的打开和关闭文件的打开(fopen函数)文件的关闭fclose函数关于文件的使用方式 文件的顺序读写什么是输入流和输出流、标准错误流 文件函数的用法fgetc函数fputc函数fgets函数fputs函数fscanf函数fprintf函数fread函数fwrite函数fseek函数ftell函数rewind函数feof函数ferror函数 文本文件和二进制文件文件缓冲区 什么是文件
磁盘上的文件是文件。但是在程序设计中我们一般谈的文件有两种程序文件、数据文件从文件功能的角度来分类的。
程序文件
包括源程序文件后缀为.c,目标文件windows环境后缀为.obj,可执行程序windows环境后缀为.exe。
数据文件
文件的内容不一定是程序而是程序运行时读写的数据比如程序运行需要从中读取数据的文件或者输出内容的文件。
文件名
一个文件要有一个唯一的文件标识以便用户识别和引用。 文件名包含3部分文件路径文件名主干文件后缀 例如
为了方便起见文件标识常被称为文件名。
文件的打开和关闭
文件指针 缓冲文件系统中关键的概念是“文件类型指针”简称“文件指针”。 每个被使用的文件都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息如文件的名字文件状态及文件当前的位置等。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的取名FILE。 每当打开一个文件的时候系统会根据文件的情况自动创建一个FILE结构的变量并填充其中的信息使用者不必关心细节。 一般都是通过一个FILE的指针来维护这个FILE结构的变量这样使用起来更加方便。 下面我们一起来创建一个文件指针变量:
FILE* pf;//文件指针变量定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区是一个结构体变量。通过该文件信息区中的信息就能够访问该文件。也就是说通过文件指针变量能够找到与它关联的文件。如下图所示 代码实例
int main()
{FILE* pf fopen(text.txt, w);//打开一个文件以写的形式if (pf NULL){perror(fopen);return 1;}//写文件char ch 0;fputc(a, pf);//写入字符a到文件中fclose(pf);pf NULL;return 0;
}运行结果:
我们注意此时的光标是指向的字符a,也就是文件指针是指向了a的位置且随着你追加的字符文件指针的位置也会随着改变。 文件的打开和关闭 文件在读写之前应该先打开文件在使用结束之后应该关闭文件。 在编写程序的时候在打开文件的同时都会返回一个FILE*的指针变量指向该文件也相当于建立了指针和文件的关系。 ANSIC 规定使用fopen函数来打开文件fclose来关闭文件。
文件的打开(fopen函数) fopen函数用来打开一个文件具体如何使用我们看下图 具体代码演示
//以写的形式打开一个名称为:test的文本
FILE* pf fopen(test.txt, w);文件的关闭fclose函数 fclose函数用来关闭打开的文件。具体用法如下 具体代码演示
FILE* pf fopen(test.txt, w);
fclose(pf);//关闭打开的文件关于文件的使用方式
文件使用方式含义如果指定文件不存在 “r”只读 为了输入数据打开一个已经存在的文本文件为了输入数据打开一个已经存在的文本文件 “w”只写 为了输出数据打开一个文本文件建立一个新的文件“a”追加 向文本文件尾添加数据建立一个新的文件“rb”只读 为了输入数据打开一个二进制文件出错“wb”只写 为了输出数据打开一个二进制文件建立一个新的文件“ab”追加 向一个二进制文件尾添加数据出错“r”读写 为了读和写打开一个文本文件出错“w”读写 为了读和写建立一个文本文件建立一个新的文件“a”读写 打开一个文件在文件尾进行读写建立一个新的文件“rb”读写 为了读和写打开一个二进制文件出错“wb”读写 为了读和写新建一个新的二进制文件建立一个新的文件“ab”读写 打开一个二进制文件在文件尾进行读和写建立一个新文件
实例代码演示:
int main()
{//打开文件FILE* pFile fopen(myfile.txt, w);//文件操作if (pFile ! NULL)//判断文件是否打开失败fopen函数打开失败会返回NULL{fputs(fopen example, pFile);//写入信息输出流//关闭文件fclose(pFile);//关闭文件pFile NULL;//置为空指针防止野指针}return 0;
}运行结果 注在你对应的程序的文件夹下面会生成此文件并如下图所示 文件的顺序读写
功能函数名适用于 字符输入函数 fgetc所有输入流字符输出函数 fputc所有输出流文本行输入函数 fgets所有输入流文本行输出函数 fputs所有输出流格式化输入函数 fscanf所有输入流格式化输出函数 fprintf所有输出流二进制输入fread文件二进制输出 fwrite文件
什么是输入流和输出流、标准错误流 输出流(stdout)简单的理解就是你把你C语言所写的程序传递给了某个文件就是输出流。如下图 输入流(stdin):你用这C语言程序读取文件就是输入流如上图所示。 标准错误流(stderr)
文件函数的用法
fgetc函数 fgetc字符输入函数,可以通俗的理解从文件中读取字符信息 来看代码实例演示 我们先创建一个text的文本在里面放入如下图所示的信息 我们来编写一个程序来读取该文本中的信息
int main()
{FILE* pf fopen(text.txt, r);if (pf NULL)//判断是打开文件失败{perror(fopen);return 1;}//读文件int ch fgetc(pf);//将读取到的字符保存在ch中printf(%c , ch);//打印读取的字符ch fgetc(pf);printf(%c , ch);ch fgetc(pf);printf(%c , ch);ch fgetc(pf);printf(%c , ch);ch fgetc(pf);printf(%c , ch);fclose(pf);pf NULL;return 0;
}运行结果 fputc函数 fputc字符输出函数可以通俗的理解成在C语言程序输出字符到文件中去。 代码实例演示:
//读写文件
int main()
{FILE* pf fopen(weiwei.txt, w);//以写的形式打开文件if (pf NULL)//判断打开是否成共{perror(fopen);//找出错误原因return 1;}//写文件char ch 0;for (ch a; ch z; ch){if (ch % 5 0){fputc(\n, pf);//每个五的倍数的ASCII值换行一次}fputc(ch, pf);//把ch中的字符写入文件指针pf中}fclose(pf);//关闭文件pf NULL;return 0;
}运行结果 fgets函数 fgetc函数文本行输出函数通俗的理解从文件中读取行数据 代码实例演示:
int main()
{char mystring[100] { 0 };//创建一个字符数组用来存放读取的数据FILE* pFile fopen(myfile.txt, r);//以读的形式打开文件if (pFile NULL) //判断是否打开成功perror(Error opening file);else {if (fgets(mystring, 20, pFile) ! NULL)//读取20个字符数据20个字节一个汉字是两个字节puts(mystring);//输出字符数组fclose(pFile);//关闭文件pFile NULL;//置为空指针}return 0;
}文本中的数据
运行结果 fputs函数 fputc函数可以通俗的理解成将数组中的字符串写入文件中。 代码实例演示:
int main()
{char sentence[256] { 0 };printf(请追加一个句子: );fgets(sentence, 256, stdin);//将输入流中即文件中数据放在字符数组中FILE* pFile fopen(zhouzhou.txt, a);fputs(sentence, pFile);//将字符数组中的数据写入文件当中fclose(pFile);return 0;
}运行结果 fscanf函数 fscanf函数可以通俗的理解成以格式化的形式读取文件中的数据 代码示例演示
int main()
{char str[80];float f;FILE* pFile fopen(mywei.txt, w);//以读和写的形式打开一个文件fprintf(pFile, %f %s, 3.1416, PI);//把该数据格式化写入到文件中去rewind(pFile);//将指针初始化fscanf(pFile, %f, f);//格式化读取文件中的数据fscanf(pFile, %s, str);//同理fclose(pFile);//关闭文件pFile NULL;printf(I have read: %f and %s \n, f, str);return 0;
}运行结果 fprintf函数 fprintf函数可以通俗的理解成从C语言程序中格式化的写入数据到文件去。 代码实例演示
int main()
{int n;char name[100];FILE* pFile fopen(myfile.txt, w);for (n 0; n 3; n){puts(please, enter a name: );gets(name);//读取字符fprintf(pFile, Name %d [%-10.10s]\n, n 1, name);//格式化写入数据到文件中}fclose(pFile);return 0;
}运行结果: fread函数 fread函数可以通俗的理解成用二进制的形式读取文件 代码实例演示
int main()
{int arr[10] { 1222,1222,33,19,5,6,7,8,9,10 };//int arr[10] {0};FILE* pf fopen(wwwagou.bin, wb);//读写if (pf NULL){perror(fopen);return 1;}//二进制的写文件fwrite(arr, sizeof(arr[0]), sizeof(arr) / sizeof(arr[0]), pf);//二进制的读文件fread(arr, sizeof(arr[0]), sizeof(arr) / sizeof(arr[0]), pf);int i 0;for (i 0; i 10; i){printf(%d , arr[i]);}fclose(pf);pf NULL;return 0;
}运行结果 fwrite函数 fwrite函数可以通俗的理解成用二进制的形式写入数据到文件中。 代码实例演示:
int main()
{char buffer[] { x , y , z };FILE* pFile fopen(myfile.bin, wb);//以二进制的形式写入fwrite(buffer, sizeof(char), sizeof(buffer), pFile);//写入数据fclose(pFile);return 0;
}运行结果 在记事本中打开会发现我们可以看懂这个代码 假若修改一下
int main()
{int buffer[] {1,2,3};FILE* pFile fopen(myfile.bin, wb);//以二进制的形式写入fwrite(buffer, sizeof(int), sizeof(buffer), pFile);//写入数据fclose(pFile);return 0;
}我们此时会发现在记事本中是一串乱码因此我们要在Vscode中去读取 fseek函数 feek函数可以理解成根据文件指针的位置和偏移量来定位文件指针也就是随机在哪里读写数据。 代码实例演示
int main()
{FILE* pFile fopen(example.txt, wb);if (pFile NULL){perror(fopen);return 1;}fputs(This is an apple., pFile);//写入数据到文件中fseek(pFile, 9, SEEK_SET);//调整光标指针为起始位置往后第九个的位置fputs( sam, pFile);//从光标指针指向第九个字符的位置追加新的数据fclose(pFile);//关闭文件pFile NULL;return 0;
}运行结果: ftell函数 ftell函数通俗的讲就是返回当前位置的光标距离起始位置的距离的值 代码实例演示
int main()
{long size;FILE* pFile fopen(myfile.txt, rb);//读写一个二进制文件if (pFile NULL) perror(Error opening file);else{fseek(pFile, 0, SEEK_END); // non-portablesize ftell(pFile);//计算举例起始位置的距离fclose(pFile);printf(Size of myfile.txt: %1d bytes.\n, size);}return 0;
}文件中原本的样子 运行结果 rewind函数 rewind函数让文件指针的位置回到文件的起始位置 代码实例演示:
int main()
{int n;FILE* pFile;char buffer[27];pFile fopen(myfile1.txt, w);for (n A; n Z; n)fputc(n, pFile);//将数据写入文件rewind(pFile);//回到起始位置fread(buffer, 1, 26, pFile);//读取fclose(pFile);buffer[26] \0;puts(buffer);//输出数据return 0;
}运行结果 feof函数 feof函数在文件读取结束后用来判断文件是否遇到文件末尾而结束 代码实例演示
int main()
{FILE* pFile;int n 0;pFile fopen(myfile.txt, rb);//读写的形式打开文件if (pFile NULL) perror(Error opening file);else{while (fgetc(pFile) ! EOF)//读取里面的数据 {n;//判断有几个bytes}if (feof(pFile))//判断是否正常结束{puts(End-of-File reached.);//正常结束printf(Total number of bytes read: %d\n, n);//计算总字节数}else puts(End-of-File was not reached.);fclose(pFile);}return 0;
}记事本中的数据: 运行结果: ferror函数 ferror函数用来判断在文件读取结束后用来判断文件是否因为读取过程当中遇到错误而结束 代码实例演示
int main()
{FILE* pFile;pFile fopen(myfile.txt, r);if (pFile NULL) perror(Error opening file);else {fputc(x, pFile);//写入数据if (ferror(pFile))//判断在读取的过程中的错误printf(Error Writing to myfile.txt\n);perror(pFile);//判断错误原因fclose(pFile);//因为是以读的形式所以失败}return 0;
}运行结果 文本文件和二进制文件
根据数据的组织形式数据文件被称为文本文件或者二进制文件。数据在内存中以二进制的形式存储如果不加转换的输出到外存就是二进制文件。如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。一个数据在内存中是怎么存储的呢 字符一律以ASCII形式存储数值型数据既可以用ASCII形式存储也可以使用二进制形式存储。如有整数10000如果以ASCII码的形式输出到磁盘则磁盘中占用5个字节每个字符一个字节而二进制形式输出则在磁盘上只占4个字节(VS2013测试)。
文件缓冲区
ANSIC 标准采用“缓冲文件系统”处理的数据文件的所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据则从磁盘文件中读取数据输入到内存缓冲区充满缓冲区然后再从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲区的大小根据C编译系统决定的。因为有缓冲区的存在C语言在操作文件的时候需要做刷新缓冲区或者在文件操作结束的时候关闭文件。如果不做可能导致读写文件的问题。 结语今天的内容就到这里吧谢谢各位的观看如果有讲的不好的地方也请各位多多指出作者每一条评论都会读的谢谢各位。 祝各位接下来好运连连