C语言中文件相关操作

需要快速查看文件操作函数可以直接点击目录跳转。

文件相关概念:

文件的概念:

文件:是指驻留在外部介质(如磁盘)中的一个有序数据集,可以是源文件、目标程序文件、可执行程序,当然也可以是待输入的原始数据,或是一组输出的结果。

其中源文件、目标文件和可执行程序称为程序文件,输入输出数据属于数据文件。

文件的分类:

数据文件分为文本文件和二进制文件。

文本文件是以字符ASCII码值进行储存与编码的文件,其文件的内容就是字符。

二进制文件是储存二进制的文件。

文件的实质:

C语言把文件看作数据流,将数据按顺序以一维方式组织储存。

可以简单理解成录音磁带,录音和放音的过程是顺序进行的。文件的储存和读取也是顺序进行的。文件打开即打开流,关闭文件即关闭流。

数据流又分为字符流和二进制流,前者属于文本文件,后者属于二进制文件。

文件打开关闭的本质(缓冲文件系统)

首先C语言的的文件打开与存入是对磁盘操作。

由于系统对不同文件读取速度不同,为了避免拥挤,C程序采用缓冲文件系统,即程序和磁盘间通过缓存区进行交互,你可以把它看作一个中介。

在操作数据时,系统自动为每一个文件分配一块文件内存缓冲区(内存单元),当程序要向磁盘写入数据时,先把数据储存到缓存区,然后由操作系统把缓存区数据写入磁盘。

文件储存在磁盘上的,磁盘数据按扇区组织,规定每个扇区大小为512B(1B=1字节),缓存区的大小由C语言版本决定。

文件相关操作:

1.文件类型指针

FILE *fp//定义FILE结构指针

 FILE是文件类型定义符,fp是文件类型的指针变量。

注意:文件指针fp不能像普通指针一样可以进行fp++或*fp等操作,fp++意味指向下一个FILE文件结构(前提是存在下一个)。

2.打开文件和关闭文件

打开:
fopen("文件名","文件打开方式");

该函数有返回值,若打开成功返回包含文件缓存区等信息的FILE结构地址,否则返回一个NULL(空值)的FILE指针。

文件名需要写出文件的路径,路径若包含绝对完整路径,定位子目录用的斜杆“\”需要用“\\”,因为在C语言中认为'\'是转义符。'\\'表示的是实际意义上的'\'。

文件打开方式:

“r”:以只读的形式打开文本文件(不存在则出错)
“w”:以只写的形式打开文本文件(若不存在则新建,反之,则从文件起始位置写,覆盖原内容)
“a”:以追加的形式打开文本文件(若不存在,则新建;反之,在原文件后追加)
“r+”:以读写的形式打开文本文件(读时,从头开始;写时,新数据只覆盖所占的空间)
“wb”:以只写的形式打开二进制文件
“rb”:以只读的形式打开二进制文件
“ab”:以追加的形式打开一个二进制文件
“rb+”:以读写的形式打开二进制文件。
“w+”:首先建立一个新文件,进行写操作,然后从头开始读(若文件存在,原内容将全部消失)
“a+”:功能与”a”相同。只是在文件尾部追加数据后,可以从头开始读
 

为保证文件操作的可靠性,我们常常使用if判断,以确保文件正常打开后在对其进行读写操作。

其形式为:

if((fp=fopen("naughty.txt","r"))==NULL)
{
    printf("File open error!\n");
    exit(0)//系统标准函数,关闭所有打开的文件,并终止程序的进行
}

注意:C语言支持同时打开多个文件,但不支持同一文件在关闭前被再次打开(重复打开一个文件)。 

关闭: 
fclose(文件指针);

该函数的返回值是一个整数,若返回值为0则表示关闭成功,否则则为无法正常关闭。同样可以使用if语句来保证期被关闭后再进行后续操作。

if(fclose()fp)
{
    printf("关闭失败");
    exit(0);
}

关闭文件操作会使缓存取得的数据强制写入磁盘,还会释放文件缓存区单元和FILE结构,使文件指针与具体文件脱钩。

3.文件的读写 

 1.字符方式文件读写函数fgetc()和fputc():
ch=fgetc(fp);//从文件中读取一个字符(类似于getchar())
fputc(ch,fp);//将ch写入文件,成功返回ch,失败返回EOF
2.字符串方式文件读写函数fgets()和fputs(): 
fputs(s,fp);//将s写入文件。成功返回s的最后一个字符,失败返回EOF(s末尾\0不写入文件)
fgets(s,n,fp);//将s写入文件,最多读取长度为n(写入后最后自动添加'\0')

fgets()成功返回字符串,失败返回EOF.

3.格式化方式文件读写函数fscanf()和fprintf(): 
fscanf(fp,"%d",&a);
fprintf(fp,"%d",a);

4.其他相关函数 

1.获取指针当前位置ftell()
ftell(文件指针);//出错时返回-1L

ftell()函数用来获取当前文件读写位置指针的位置,吉祥对于文件开头的位移量(字节数)。

2.指针移动控制函数fseek()
fseek(fp,offfset,from);

offset表示移动偏移量,它应是long型数据,使用常量时,应加上后缀“L”。from表示从哪个位置开始计算偏移量。

3.文件末尾检测函数feof()
feof(fp);//成功返回1,表示已经到了文件结束位置,否则返回0,表示文件还未结束。

一般用!feof(fp)表示文件是否结束的循环条件。

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