c语言文件操作字符,超详细C语言文件操作知识点

文章目录

文件的打开

ANSI C规定了标准/输出函数库,用fopen函数来实现打开文件。fopen函数的原型定义在头文件stdio.h中。

一般形式:

FILE *fp; fp=fopen(filename,mode);

fopen函数有两个参数:

filename:一个指向字符的指针

mode:系统规定的字符串,表示文件的操作属性

mode字符串对应的操作模式:

读写方式

文件类型

含义

读写方式

文件类型

含义

“r”

文本文件

打开文本,只读

“rb+”

二进制文件

打开二进制文件,读、覆盖写

“w”

文本文件

建立文本文件,只写

“wb+”

二进制文件

打开二进制文件,先写后读

“a”

文本文件

打开文本文件,追加

“ab+”

二进制文件

打开二进制文件,读,追加

“rb”

二进制文件

打开二进制文件,只读

“rt”

文本文件

打开文本文件,只读

“wb”

二进制文件

建立二进制文件,只写

“wt”

文本文件

建立文本文件,只写

“ab”

二进制文件

打开二进制文件,读、追加

“at”

文本文件

打开文本文件,追加

“r+”

文本文件

打开文本文件,读、覆盖写

“rt+”

文本文件

打开文本文件,读、覆盖写

“w+”

文本文件

打开文本文件,先写后读

“wt+”

文本文件

打开文本文件,先写后读

“a+”

文本文件

打开文本文件,读、追加

“at+”

文本文件

打开文本文件,读、追加

三个基本模式:

“r”(read)模式总是打开一个已经存在的文件,如果文件不存在则出错。

“w”(write)模式建立一个新文件,如果文件已经存在,那么先删除存在的文件,再建立新文件。

“a”(append)打开一个存在的文件,在文件的尾部追加数据。

三个追加符:

“b”(binary)表示二进制文件。

“t”(或默认)表示文本文件。

“+”表示将模式扩展为可读、可写方式。

文件的一般打开方式

fopen()函数打开文件有可能失败。如用“r”模式打开不存在的文件,此时会返回一个空指针NULL。则程序无法继续输入/输出数据。故需要在打开文件时判断是否有错。

FILE *fp;

if((fp=fopen(filename,mode))==NULL)

{

printf("打开文件错误!\n");

exit(1);/*由exit函数终止程序运行。*/

}

打开文件将通知编译系统3个信息:

1.使用的文件指针

2.需要打开的文件名

3.使用文件的方式

文件的关闭

文件打开的目的是为了读/写,当文件使用完毕后,应当关闭文件。关闭文件的三个目的:

1.保证文件的数据不丢失,将缓冲区中的数据回写文件。

2.释放缓冲区。

3.切断文件指针与文件的关联,使关闭后的文件指针可以用于打开其他文件。

C语言定义了关闭文件的标准函数fclose。函数原型定义在头文件stdio.h中,其一般形式为:fclose(文件指针);

例如:fclose(fp);//fp是文件指针。

文件的读/写

字符输入/输出函数

字符输出函数fputc()

用法:fputc(ch,fp);

ch:输出的字符;fp:文件指针变量

功能:写一个字符到fp对应文件的当前位置上。如果调用函数成功,则返回ch的值;如果失败,则返回值EOF(系统定义的宏,值为-1);

字符输入函数fgetc()

用法:ch=fgetc(fp);

fp:文件指针变量

功能:从fp对应的当前位置读一个字符。如果调用成功,则返回读到的字符(赋值给ch);如果读到文件结束,则返回EOF(-1)。

文件结束检测函数feof()

用法:feof(fp);

fp:文件指针变量

功能:判断文件是否处于文件结束位置。如果文件结束,则返回1,否则返回0。

字符串输入/输出函数

字符串输入函数fgets()

用法:fgets(str,n,fp);

str:字符指针或数组名;n:整型量,说明输入字符串的最大长度(包括‘\0’);fp:文件指针

功能:从fp对应文件的当前位置,最多输入n-1个字符,在最后加‘\0’,之后放在str为首地址的内存中。

注意:在输入过程中,如果遇到换行符或EOF,输入即结束。函数正常调用,返回str的首地址,当出错或遇到文件结束标志时,返回NULL。

字符串输出函数fputs()

用法:fputs(str,fp);

str:函数参数str是字符指针或数组名;fp:文件指针

功能:将首地址是str的字符串输出到fp对应文件的当前位置,自动丢弃str后的‘\0’。函数调用成功后返回值是0,否则是EOF。

在文件使用中,可采用标准的设备文件,系统为每一个设备指定了标准的文件指针名称。

常见的标准设备文件:

文件号

文件指针

标准文件

0

stdin

标准输入设备(键盘)

1

stdout

标准输出设备(显示器)

2

stderr

标准错误设备(显示器)

3

stdaux

标准辅助设备(辅助设备端口)

4

stdprn

标准打印(打印机)

文件的格式化输入/输出函数

格式化输入函数fscanf()

用法:fscanf(fp,format,&arg1,&arg2,…,&argn);

fp:文件指针;format:格式说明字符串;&arg1…&argn:输入变量的地址列表。

功能:从fp指向的文件的当前位置,顺序读取ASCII码值,按照fomat规定的格式转化为各个变量对应的值,送入指定变量。

格式化输出函数fprintf()

用法:fprintf(fp,format,arg1,arg2,…,argn);

fp:文件指针;format:格式说明字符串;arg1…argn:输出参数个数表

功能:按指定的格式(format)将输出列表arg1…argn的值转换成对应的ASCII码表示形式,写入fp文件的当前位置。例如:

fprintf(fp,"%d,%x,%u",123,145,12);

文件的数据块输入/输出函数

数据块输入函数fread()

用法:表示从文件中读入数据到内存缓冲区。形式为:fread(buf,size,count,fp);

buf:类型为void指针,表示内存中存放着数据到首地址,通常是数组名或数组指针。

size:无符号整型,表示一次读取的字节数。

count:无符号整型,表示读取的大小为size的块的次数。

fp:文件指针。

功能:从fp指向的文件的当前位置读区size个字节,共count次,读取的总字节数为size*count,存放到首地址为buf的内存中。读取成功则返回读取的项数count。

数据块输出函数fwrite()

用法:表示从内存输出数据块到文件中。其一般形式为:

fwrite(buf,size,count,fp);

buf:类型为void指针,表示内存中存放着数据到首地址,通常是数组名或数组指针。

size:无符号整型,表示一次写入的字节数。

count:无符号整型,表示写入的大小为size的块的次数。

fp:文件指针。

功能:从fp指向的地址开始,分count次,每次size个字节,向fp指向的文件的当前位置写数据,共写入count*size个字节。写入成功则返回读取的项数count。

fread()和fwrite()读/写的最小单位是字节,而fscanf()和fprintf()的读/写数据基本单位是以类型为单位的数据对象。so,fread()和fwrite()更适合处理二进制文件,而fscanf()和fprintf()则更适合处理的都是文本文件。

在读取二进制文件时不能用EOF作为文件标志,要用feof函数判断文件是否结束。因为-1可能是一个有效数据。

整数输入/输出函数

getw 函数(只适用于二进制文件)

getw函数表示整数输入。一般形式为:

int a;

a=getw(fp);

功能:从fp指向的文件中读取一个整数(2字节),整数由函数返回。只使用于二进制文件。

putw 函数(适用于二进制文件)

putw函数表示整数输出。其一般形式为:

putw(i,fp);

功能:将整数i输出到文件fp之中。

文件的定位操作

ftell函数

用来取文件当前位置。其一般形式为:

long n;

n=ftell(fp);

功能:取得文件当前的读/写位置。(即从文件开始处到当前读/写位置的字节数(用长整型量表示))。函数调用正确返回文件当前读/写位置。调用错误就返回-1L。

fseek函数

fseek函数用来改变文件指针的当前位置。其一般形式为:

fseek(fp,offset,from);

offset:位移量,类型为long型,表示以from为起点移动的量相对值(字节数)。

from:移动的起始位置。

form的取值是系统规定的,具体如下:

from的值

from的宏名

表示文件的位置

0

SEEK_SET

文件头

1

SEEK_CUR

读/写当前位置

2

SEEK_END

文件尾

例如:

fseek(fp,50L,SEEK_SET);//将读写指针移动到离文件头50个字节处

fseek(fp,100L,1);//将读写指针移动到离当前位置100个字节处

fseek(fp,-20L,2);//将读写指针移动到离文件末尾处20个字节处。

rewind函数

用来置文件读/写位置于开头处。一般形式为:

rewind(fp);

功能:将文件的当前位置移动到文件的开始处。

重点

·用rewind()函数可以将文件指针移到文件头,函数执行成功则返回0值,否则返回非0值。

·用ftell()函数可以返回文件指针的当前位置;返回值为long,是相对于文件头头的字节数,出错时返回-1L.

·用fseek()函数可以移动文件指针到指定位置。如果一个二进制文件中存放的是若干个结构体数据,则可以使用fseek()和ftell()函数来确定文件的长度n(字节数)以及文件中包含的数据块个数k。

例如:

fseek(fp,0L,SEEK_END);//将指针移动到文件尾

n=ftell(fp);//取当前字节数赋值给n

k=n/sizeof(struct st);

·只要一个文件中的各个数据项具有相等的长度,则该文件即可以顺序存取,也可以随机存取。

标签:fp,知识点,函数,文件,二进制,C语言,文本文件,详细,指针

来源: https://blog.csdn.net/xsydalao/article/details/96898712

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值