C语言中关于文件处理的常用函数

目录

标准IO流

文本文件与二进制文件

打开文件

读写文件

文本文件

二进制文件

文件定位

关闭文件

注意事项


标准IO流

在C语言中,流(Stream)是用于描述一切输入源或输出目的地的概念。流可以是键盘输入、屏幕输出,也可以是磁盘文件。标准流包括三个预定义的流:

  • stdin:标准输入流,默认为键盘。
  • stdout:标准输出流,默认为屏幕。
  • stderr:标准错误输出流,也是屏幕,但通常用于错误信息。

文本文件与二进制文件

C语言处理的文件主要有两种类型:文本文件和二进制文件。

  • 文本文件:由字符序列组成,适合存储人类可读的文本信息。处理文本文件时,C语言提供了fgetcfputcfgetsfputsfscanffprintf等函数。
  • 二进制文件:保存的是字节流,可能包含非打印字符,适合存储数据结构或二进制数据。对于二进制文件,通常使用freadfwrite进行读写。

打开文件

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

  • 功能:打开一个文件并返回一个FILE指针。
  • 参数
    • filename:文件的路径。
    • mode:打开模式,如"r"(读取)、"w"(写入)、"a"(追加)、"r+"(读写)等。

读写文件

文本文件

对于文本文件,可以使用以下函数进行读写:

int fgetc(FILE* stream)

  • 功能:从流中读取一个字符。
  • 参数
    • stream:文件流。
  • 返回值:成功时返回读取的字符(类型为int),失败或到达文件末尾时返回EOF

int fputc(int c, FILE* stream)

  • 功能:写入一个字符至流。
  • 参数
    • c:要写入的字符(被转换为unsigned char)。
    • stream:文件流。
  • 返回值:成功时返回写入的字符,失败时返回EOF

char* fgets(char *s, int n, FILE *stream)

  • 功能:读取一行文本至字符串。
  • 参数
    • s:指向用于存储读取文本的缓冲区的指针。
    • n:缓冲区的大小。
    • stream:文件流。
  • 返回值:成功时返回s,失败或到达文件末尾时返回NULL

int fputs(const char *s, FILE *stream)

  • 功能:写入字符串至流中。
  • 参数
    • s:要写入的字符串(不包括终止的空字符)。
    • stream:文件流。
  • 返回值:成功时返回非负值,失败时返回EOF

int fscanf(FILE *stream, const char *format, ...)

  • 功能:根据格式化字符串读取数据。
  • 参数
    • stream:文件流。
    • format:格式化字符串,类似于scanf()
    • ...:可变参数,根据format中的格式说明符提供具体的值。
  • 返回值:成功时返回成功读取的数据项数量,失败时返回EOF

int fprintf(FILE *stream, const char *format, ...)

  • 功能:根据格式化字符串写入数据。
  • 参数
    • stream:文件流。
    • format:格式化字符串,类似于printf()
    • ...:可变参数,根据format中的格式说明符提供具体的值。
  • 返回值:成功时返回写入的字符总数,失败时返回负值

二进制文件

二进制文件使用freadfwrite进行读写:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

  • 功能:从流中读取数据至内存块。
  • 参数
    • ptr:指向用于存储读取数据的内存块的指针。
    • size:每个数据项的大小(以字节为单位)。
    • nmemb:数据项的数量。
    • stream:文件流。
  • 返回值:成功读取的数据项数量。如果读取失败或到达文件末尾,则返回的数量可能小于nmemb

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

  • 功能:从内存块写入数据至流。
  • 参数
    • ptr:指向包含要写入数据的内存块的指针。
    • size:每个数据项的大小(以字节为单位)。
    • nmemb:数据项的数量。
    • stream:文件流。
  • 返回值:成功写入的数据项数量。如果写入失败,则返回的数量可能小于nmemb

文件定位

文件定位允许程序控制读写的位置。以下函数用于文件定位:

int fseek(FILE *stream, long offset, int whence)

  • 功能:改变文件位置。
  • 参数
    • stream:文件流。
    • offset:相对于whence的偏移量(以字节为单位)。
    • whence:起始位置,指定偏移量的起点,可以是:
      • SEEK_SET:文件开头。
      • SEEK_CUR:当前位置。
      • SEEK_END:文件末尾。
  • 返回值:成功时返回0,失败时返回非零值。

long ftell(FILE *stream)

  • 功能:获取当前文件位置。
  • 参数
    • stream:文件流。
  • 返回值:返回当前文件位置的偏移量(以字节为单位)。如果失败,则返回-1L

void rewind(FILE *stream)

  • 功能:将文件位置重置到文件开头。
  • 参数
    • stream:文件流。
  • 返回值:无返回值。

关闭文件

完成文件处理后,务必关闭文件以释放资源::

int fclose(FILE *stream)

  • 功能:关闭一个已打开的文件流。
  • 参数
    • stream:文件流,需要关闭的文件流。
  • 返回值:成功时返回0,失败时返回EOF。

注意事项

  • 确保格式字符串与文件中的数据格式相匹配。
  • 注意处理文件打开失败或读取错误的情况。
  • 在使用完文件后,记得关闭文件以释放资源。
  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值