c语言(磁盘)文件介绍和操作(超详细)

目录

一.c语言文件的概念

缓冲文件系统

文件型指针

二.打开文件和关闭文件

1.打开文件函数

2关闭文件

3.标准设备文件

三.文件的读和写

1.字符文件读写函数fgetc()和fputc();

2.数据块文件读写函数fread()和fwrite();

3.格式文件读写函数fscanf()和fprintf();

4.字符串文件读写函数fgets()和fputs().


一.c语言文件的概念

 

文件(file)是指存储在外部介质(磁盘,磁带)上的,以唯一的名字作为标记的数据集合。

操作系统以文件为单位对数据进行管理。与主机相连的输入输出设备,其作用也是从设备上读取数据和将数据写到设备上,因此也把输入输出设备看作是文件。例如,键盘是一种输入文件,显示屏是输出文件。

文件的操作主要有二:文件的读操作和文件的写操作。文件的读:从文件中取出数据存入内存变量中;文件的写:将内存变量中存放的数据存放到文件中。

c语言(磁盘)文件介绍和操作(超详细)_第1张图片

文件数据的存储一般有两种形式:1是以ASCII码的形式按字节存储的(叫做文本文件);2是以在内存中的二进制数形式存储的文件(二进制文件)。

二进制文件存储的数据一般要比文本文件的存储紧凑,占用内存少。读写数据时由于没有格式的转换,因而速度较快。而文本格式存储的数据可以直接输入输出,用户可以直接阅读文件内容。

缓冲文件系统

缓冲文件系统是指在进行文件的读和写操作时,系统自动为每个打开的文件开辟一个内存缓冲去。数据的输入输出都是通过缓冲区去进行。

文件型指针

这个结构类型是系统定义的,并通过typedef将该结构体起名为FILE。FILE结构型定义在stdio.h文件中。定义如下

typedef struct
{
int _fid;
int _cleft;
int _mode;
char *nextc;
char *buff;
}FILE;

程序使用文件首先必须定义一个FILE型结构的指针变量。指向FILE结构性的指针称为文件型指针。例如    程序要同时要操作两个文件

FILE *p,*q;

两个文件的输入输出操作将通过相应的文件指针进行。

二.打开文件和关闭文件

1.打开文件函数

打开文件函数fopen()格式:

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

filename 是字符型指针,它指向的字符串是要打开的文件名;mode指向文件的使用方式,即打开模式。

     文件的使用方式字符串共有12个,6个用于文本文件,6个用于二进制文件。

功能
r 打开一个已存在的文本文件,只能用于从文件向计算机输入数据(读文件),不能向该文件输出数据(写文件)。
w 打开一个文本文件,只能写入(输出)数据
a 打开一个文本文件,在文件尾追加数据
w+ 打开一个文本文件,可读可写
a+ 打开已存在文本文件,可读,也可向文件尾写数据
rb 打开已存在二进制文件,只读
wb 打开一个二进制文件,只写
ab 打开已存在二进制文件,文件尾写
rb+ 打开已存在二进制,可读可写
wb+ 打开一个二进制文件,可读可写
ab+ 打开已存在二进制文件,可读,也可向文件尾加
r+ 打开一个已存在的文本文件,可读可写

例如:if((fp=fopen("myfile","r"))==NULL)以"r"模式打开文件"myfile",文件型指针fp接收函数fopen的返回值,并判断文件是否成功打开。

2关闭文件

int  fclose(FILE *fp)

例子:打开关闭文件的使用

下面的程序将二进制文件data.dat以写方式打开,然后关闭该文件。

#include
int main()
{
FiLE *fp;                  /*定义文件型指针变量*/

if((fp=fopen("data.dat","wb"))==NULL)/*打开文件并判断文件是否正确打开*/
{
printf("file can't open\n");
exit(1);
}
fclose(fp);               /*关闭打开的文件*/
}

3.标准设备文件

标准输入设备为键盘,标准输出设备为显示器。

三.文件的读和写

成功打开文件后就可以,就可以对文件进行读和写了。c语言提供了四组文件读写函数:

1.字符文件读写函数fgetc()和fputc();

2.数据块文件读写函数fread()和fwrite();

3.格式文件读写函数fscanf()和fprintf();

4.字符串文件读写函数fgets()和fputs().

1

(1)写字符文件函数fputc()

int  fputc(char ch,File *fp)

其中参数fp为文件指针,它的值是执行函数fopen()打开文件时获得的。ch为字符变量,其值即为所要写进文件的字符。

(2)读字符文件函数fgetc()

int fgetc(File *fp)

函数功能:从fp所指向的文件当前读指针位置读取一个字符。

2

(1)写字符串文件函数fputs()

char fputs(char *str,File *fp)

函数功能:将参数str指向的字符串(舍掉结束标记"\0")写入fp所指向的文件。文件内部指针自动后移一个字符串的位置。

(2)读字符串文件函数fgets()

char *fgets(char *str,int length, File *fp)

函数功能:从fp所指文件当前位置读取(length -1)个字符,在其后加上一个字符串结束标记"\0",组成字符串,存入str指定的内存区。

3

(1)数据块文件写函数fwrite()

unsigned fwrite(void *buffer, unsigned num_bytes, unsigned count, File *fp)

其中参数buffer是指向将要写到文件中的数据块指针,可以是存放数据的变量地址或数组首地址。num_bytes是无符号整型,可以是常量、变量或表达式。它是写入文件的每个数据所占用的字节数。

函数功能:将buffer所指向的count个数据(每个数据num_bytes字节)写入fp指向的文件。

(2)数据块文件读写函数fread()

unsigned fread(void *buffer, unsigned num_bytes, unsingned count,File *fp)

函数功能:从fp所知的文件的当前位置读取count 个数据,每个数据的字节数为num_bytes,存入buffer指定的内存区。

4

(1)格式化写函数fprintf()

int fprintf(File *fp,char *control_string,e1,e1,````,en)

参数fp是文件型指针;control_string是存放格式字符串的字符常量,或者是存放格式字符串的数组首地址,或者是指向格式字符串的指针变量;e1,e2,en是与格式字符串匹配的变量地址或数组首地址。

计算各表达式e1,e2,en的值,按照control_string指定的格式,写入fp所指向的文件。

(2)格式化读函数fscanf()

int fscanf( File *fp, char *control_string,e1,e2,en)

函数功能:从fp所指向的文件中,按照control_string规定的格式,读取n个数据,依次存入e1,e2,en地址中。

例如:从键盘输入三个数据(字符串,浮点数和整数)然后,将它们存入磁盘文件data.

#include
main()
{
FILE *fp;              //定义文件指针
char str[10];
float fval;
int k;

if((fp=fopen("data","w"))==NULL)   //打开文件
{
printf("cannot open file");
return 0; 
}

printf("输入字符串、浮点型、整型:");
fscanf(stdin,"%s%g%d",&str,&fval,&k);    //从键盘读取数据
fprintf(fp,"%s    %g    %d",str,fval,k); //将数据写入文件

fclose(fp);
return 0;
}

你可能感兴趣的:(c语言,开发语言,后端)