C语言文件操作
一,文件的概念
1.为什么使用文件
在我们写程序时,程序中的数据是存放在内存中的,当程序退出时数据会丢失。如果想要保存下数据,就要把数据存放到磁盘和数据库中。使用文件就可以将数据存放在磁盘中。
2.什么是文件
磁盘上的文件是文件。
在程序设计中,一般说的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)
-
程序文件
包括源程序文件(后缀为.c),目标文件(windows环境后缀.obj),可执行程序(windows环境后缀为.exe) -
数据文件
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。 -
文件名
文件名包含3部分:文件路径+文件名主干+文件后缀
例如: D:\code\test.txt
二,文件的打开和关闭
1.文件指针
缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名FILE.
定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。通过文件指针变量能够找到与它关联的文件。
2.文件打开和关闭
文件在读写之前要先打开文件,在使用结束之后要关闭文件
在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。
文件的使用方式:
看下面代码:
//打开文件
FILE *pf = fopen("myFile.txt","w");
//使用文件
//...
//关闭文件
fclose(pf);
三,文件的读写
1.顺序读写
顺序读写所用的函数
2.随机读写
根据文件指针的位置和偏移量来定位文件指针
代码示例:
int main ()
{
FILE * pFile;
pFile = fopen ( "example.txt" , "wb" );
fputs ( "This is an apple." , pFile );
fseek ( pFile , 9 , SEEK_SET );
fputs ( " sam" , pFile );
fclose ( pFile );
return 0;
}
结果:
This is a sample.
返回文件指针相对于起始位置的偏移量
代码示例:
int main ()
{
FILE * pFile;
long size;
pFile = fopen ("myfile.txt","rb");
if (pFile==NULL) perror ("Error opening file");
else
{
fseek (pFile, 0, SEEK_END); // non-portable
size=ftell (pFile);
fclose (pFile);
printf ("Size of myfile.txt: %ld bytes.\n",size);
}
return 0;
}
让文件指针的位置回到文件的起始位置
代码示例:
int main ()
{
int n;
FILE * pFile;
char buffer [27];
pFile = fopen ("myfile.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;
}
四,文件的格式
1.二进制文件
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件.
这两个函数就是用来二进制文件的读写
2.文本文件
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件.
五,文件缓冲区
文件缓冲区(File Buffer)是计算机系统中用于处理文件的一种内存区域。它是在内存中分配的一块存储区域,用于临时存放文件数据。当程序需要读取或写入文件时,数据通常会先被读取到文件缓冲区中进行处理,然后再从缓冲区中写入到磁盘上的文件,或者从缓冲区中读取数据到程序中。
文件缓冲区的存在主要是为了提高文件读写的效率。相比于直接读写磁盘上的文件,通过使用文件缓冲区可以减少与磁盘的交互次数,从而提高数据访问速度。当程序请求读取文件时,文件系统会将一部分文件数据读取到文件缓冲区中,并返回给程序。程序可以在缓冲区中进行数据处理,而不必每次都直接读取磁盘上的文件。同样地,当程序请求写入文件时,数据首先会被写入到文件缓冲区中,然后再由文件系统将缓冲区中的数据写入到磁盘上的文件中。
文件缓冲区还可以通过批量读取和写入的方式进一步提高效率。通过一次性读取或写入多个数据块,可以减少磁盘访问的开销,从而提高整体的文件读写性能。