首页 > 其他分享 >C语言中关于文件处理的常用函数

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

时间:2024-08-23 23:22:08浏览次数:8  
标签:返回 文件 常用 函数 stream int C语言 FILE 返回值

目录

标准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。

注意事项

  • 确保格式字符串与文件中的数据格式相匹配。
  • 注意处理文件打开失败或读取错误的情况。
  • 在使用完文件后,记得关闭文件以释放资源。

标签:返回,文件,常用,函数,stream,int,C语言,FILE,返回值
From: https://blog.csdn.net/song0789/article/details/141370394

相关文章

  • QT中常用类的成员(2024.8.20更新)
    QT中常用类的成员1.QObject类是Qt框架中所有对象的基类,提供了信号和槽机制、事件处理、对象树和内存管理等功能2.QMetaObject类是Qt框架中用于描述对象的元数据的类,提供了元数据查询、类信息、属性信息、方法信息等功能QWidget类是Qt框架中所有图形用户界面组件......
  • C语言内存操作函数
    目录一.C语言内存操作函数1. memcpy的使用和模拟实现2.memmove函数3.memset函数4.memcmp函数一.C语言内存操作函数随着知识的不断积累,我们所想要实现的目标程序就会更加复杂,今天我们来学习一个新的知识叫做C语言内存操作函数,它是C语言标准库中提供的一系列对内存......
  • 一门多范式的编程语言Scala学习收尾-函数的使用
    4、集合(接着上次的集合继续学习)4.4可变集合1、ListBuffervallistBuffer1:ListBuffer[Int]=newListBuffer[Int]println(s"$listBuffer1")listBuffer1.+=(11)listBuffer1.+=(22)listBuffer1.+=(33)listBuffer1.+=(11)listBuffer1.+=(55)listBuffer1.+=(22)listBuffe......
  • Scratch编程乐园:探索数学函数的无限可能
    标题:Scratch编程乐园:探索数学函数的无限可能在少儿编程教育领域,Scratch以其独特的视觉化编程方式,激发了无数孩子的编程兴趣。它不仅仅是一个编程工具,更是一个创意表达的平台。然而,对于有志于深入探索数学世界的孩子们来说,Scratch是否提供了数学函数库,如三角函数或统计函数?......
  • JS函数和闭包函数详解
    JS函数和闭包函数引言简要介绍主题在前端开发中,JavaScript函数是不可或缺的一部分。函数是JavaScript中的基本构建块,用于封装代码以实现模块化和可重用性。闭包函数则是JavaScript中的高级概念,它允许函数访问其词法作用域中的变量,即使在函数执行完毕之后。本文将详细介......
  • 谷歌黑客语句常用语法
    谷歌黑客语句常用语法1.site用于显示目标地址的子域名如:site:baidu.com//可以显示baidu下的所有子域名2.intitle表示在网页标题中第一个出现的关键字网页一次只能搜索一个关键字如:intitle:百度3.allintitle在结果的标题中同时包含多个关键词如:allintitle:百度黑客4.i......
  • C++ 构造函数/析构函数中调用虚函数的情况简单测试
    #include<string>#include<iostream>usingnamespacestd;namespace{classAnimal{public:Animal(){cout<<"基类调用虚函数…"<<endl;cout<<GetInfo()<<e......
  • 【C++基础】类的构造函数和析构函数
    目录构造函数(Constructor)定义种类1.默认构造函数2.带参数的构造函数3.浅拷贝构造函数4.深拷贝构造函数深拷贝和浅拷贝的区别5.移动构造函数析构函数(Destructor)构造函数与析构函数的调用时机构造函数:析构函数:构造函数和析构函数的最佳实践避免在析构函数中抛出异......
  • 【第三节】x86汇编寻址方式与函数
    目录一、x86汇编指令1.1指令简介1.2操作码和操作数1.3指令的助记符格式1.4指令操作数表达方式1.5汇编语言的多种表达方式二、寻址方式2.1立即数寻址2.2寄存器寻址2.3存储器寻址2.4直接寻址2.5寄存器间接寻址2.6寄存器相对寻址2.7基址变址寻址2.8相......
  • 内置函数式接口
    只包含一个抽象方法的接口,称为函数式接口。可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。在任意函数式接口上设置@FunctionalInterface注解,这样做可以检查它是否是一个函数式接口,同时javadoc也会......