首页 > 其他分享 >C语言文件操作指南:读写与管理

C语言文件操作指南:读写与管理

时间:2024-06-01 14:58:42浏览次数:20  
标签:指南 文件 读取 stream 读写 写入 C语言 FILE 指针

在C语言编程中,文件操作是一个重要的主题。无论是读取配置文件、记录日志,还是处理大量数据,文件操作都是必不可少的。本文将介绍C语言中文件操作的基本概念和常用方法,帮助你轻松掌握这项技能。

一、文件操作的基本概念

在C语言中,文件操作主要包括以下几步:

  1. 打开文件:创建一个文件指针,准备进行读写操作。
  2. 读取文件:从文件中读取数据。
  3. 写入文件:向文件中写入数据。
  4. 关闭文件:关闭文件指针,释放资源。

C语言中,文件操作使用标准库<stdio.h>中的函数。文件操作的基本流程如下:

  1. 定义文件指针FILE *file;
  2. 打开文件file = fopen(filename, mode);
  3. 读/写文件fscanf(), fprintf(), fread(), fwrite()等
  4. 关闭文件fclose(file);

二、常见的文件打开模式

  • 读取模式("r")
    • 用于打开一个已存在的文件以供读取。
    • 如果文件不存在,fopen() 返回 NULL
    • 文件的指针会被放在文件的开头。
  • 写入模式("w")
    • 用于创建一个新文件以供写入。
    • 如果文件已存在,则会被清空(即删除文件中的所有内容)。
    • 如果文件不存在,将会创建一个新文件。
    • 如果创建文件失败,fopen() 返回 NULL
    • 文件的指针会被放在文件的开头。
  • 追加模式("a")
    • 用于在文件末尾追加数据。
    • 如果文件不存在,将会创建一个新文件。
    • 文件的指针会被放在文件的末尾。
    • 如果创建文件失败,fopen() 返回 NULL
  • 二进制模式("b")
    • 用于以二进制方式打开文件,适用于处理二进制数据。
    • 这个标志可以与上述任何模式("r"、"w"、"a")组合使用,例如:"rb"、"wb"、"ab"。
  • 读取/写入模式("r+"、"w+"、"a+")
    • 用于同时读取和写入文件。
    • "r+":打开文件用于读取和写入,文件必须存在。
    • "w+":创建一个新文件用于读取和写入,如果文件已存在,则清空文件。
    • "a+":打开文件用于读取和写入,写入操作在文件末尾进行,如果文件不存在,则创建一个新文件。

三、文件读写操作

1. 读取文件

读取文件的常用方法有:

  • fgetc(FILE *stream):从文件中读取一个字符。
  • fgets(char *str, int n, FILE *stream):从文件中读取一行。
  • fscanf(FILE *stream, const char *format, ...):从文件中读取格式化数据。
  • fread(void *ptr, size_t size, size_t count, FILE *stream):从文件中读取二进制数据。

2. 写入文件

写入文件的常用方法有:

  • fputc(int char, FILE *stream):向文件写入一个字符。
  • fputs(const char *str, FILE *stream):向文件写入一个字符串。
  • fprintf(FILE *stream, const char *format, ...):向文件写入格式化数据。
  • fwrite(const void *ptr, size_t size, size_t count, FILE *stream):向文件写入二进制数据。

四、文件的关闭

在完成文件读写操作后,必须关闭文件以释放资源。使用fclose(FILE *stream)函数关闭文件

FILE *file;
file = fopen("example.txt", "r");
if (file != NULL) {
    // 文件操作
    fclose(file);
}

五、错误处理

在文件操作过程中,可能会遇到各种错误,例如文件不存在、权限不足等。可以使用perror()strerror()函数打印错误信息

FILE *file;
file = fopen("example.txt", "r");
if (file == NULL) {
    perror("Error opening file");
    return -1;
}

六、文件的随机读写

  • fseek(FILE *stream, long offset, int whence):移动文件指针到指定位置。
  • ftell(FILE *stream):获取当前文件指针的位置。
  • rewind(FILE *stream):将文件指针移动到文件开始处。

fseek

参数说明
  • stream: 文件指针,指向已打开的文件。
  • offset: 相对于 whence 参数的偏移量(以字节为单位)。
    • 如果 offset 为正数,文件指针向前移动(从基准位置向文件末尾方向移动)。
    • 如果 offset 为负数,文件指针向后移动(从基准位置向文件开头方向移动)。
  • whence: 文件指针的位置基准。它可以是以下三个常量之一:
    • SEEK_SET: 文件的开头。
    • SEEK_CUR: 文件指针的当前位置。
    • SEEK_END: 文件的末尾。
返回值
  • 成功时返回 0。
  • 失败时返回非零值,并设置 errno

ftell

参数说明
  • stream: 文件指针,指向已打开的文件。
返回值
  • 成功时返回当前文件指针相对于文件开头的字节偏移量。
  • 失败时返回 -1,并设置 errno 以指示错误。

rewind

参数说明
  • stream: 文件指针,指向已打开的文件。
无返回值

文件读取结束的判定

  • fgetc:读取单个字符,返回值为EOF表示文件结束。
  • fgets:读取一行字符,返回值为NULL表示文件结束。
  • fread:读取块数据,返回值为读取到的项数,当少于请求的项数或为零时表示文件结束.

标准流

标准输入流(stdin)

  • 标准输入流是程序默认的输入源。
  • 当程序从标准输入读取数据时,它实际上是从 stdin 中读取。
  • 在终端中,通常使用键盘输入数据,这些数据就被送到了 stdin 中。

标准输出流(stdout)

  • stdout 是标准输出流,用于将程序的输出发送到终端(或控制台)。在 C 语言中,可以使用各种函数将数据写入 stdout,如 printf()fprintf()puts()putchar() 等。
  • 标准输出流是程序默认的输出目标。
  • 当程序向标准输出写入数据时,它实际上是写入到 stdout 中。
  • 在终端中,标准输出的内容通常显示在屏幕上。

标准错误流(stderr)

  • 标准错误流用于输出程序的错误消息和诊断信息。
  • 与标准输出类似,当程序向标准错误写入数据时,它实际上是写入到 stderr 中。
  • 在终端中,标准错误流的内容通常也显示在屏幕上,但与标准输出有所区别,允许将错误消息与标准输出区分开来。

标签:指南,文件,读取,stream,读写,写入,C语言,FILE,指针
From: https://blog.csdn.net/m0_74875484/article/details/139373306

相关文章

  • 通过Restful接口实现对数据库进行基本的读写操作
    一、创建springboot项目这里使用的springboot项目与我们上次使用的一样,所以创建方法跟下文一致即可。SpringBoot+MySQL的简单运用(HelloWorldAPI)-CSDN博客二、配置数据库连接2.1创建数据库首先我们要创建一个数据库,应用于本次项目。打开MySQL,输入密码登录。(MySQL安......
  • 下面提供一些C语言的入门示例代码
    下面提供一些C语言的入门示例代码,并附有注释,以帮助理解每个部分的功能。1.HelloWorld程序#include<stdio.h> //引入标准输入输出库intmain(){ //主函数的开始   printf("Hello,World!\n"); //打印"Hello,World!"到控制台   return0; //返回......
  • 构建无与伦比的深度学习环境:在CentOS上实现GPU资源管理容器的终极指南
    在CentOS上构建无与伦比的深度学习环境并实现GPU资源管理容器的过程,可以概括为以下关键步骤:一、安装NVIDIA驱动首先,为了使用GPU进行深度学习训练,你需要安装NVIDIA驱动。这通常包括以下步骤:导入ELRepo仓库的GPG密钥:bash复制代码rpm--importhttps://www.elrepo.org......
  • numpy简洁教程(一篇就够) - 属性/生成/读写/运算/形状修改
    目录1、numpy属性2、数组生成     (1)1、2、3维数组,字符串数组直接生成     (2)生成数组时指定数据类型     (3)生成0、1数组     (4)从现有数据生成数组     (5)生成固定范围数组linspace、arange、logspace     (6)生成随机数......
  • C语言练习题之——从简单到烧脑(12)(每日两道)
    题目1:找出1到99之间的全部同构数, 同构数:它出现在平方数的右边,例如:5是25右边的数,25是625右边的数,5和25都是同构数。#include<stdio.h>intmain(){ intsum=0,left=0,right=0; printf("1-99之间的同构数:\n"); for(inti=1;i<100;i++) { inta=i*i;......
  • C语言练习题之——从简单到烧脑(10)(每日两道)
    题目1:二位数组的应用:输入一个3X5的整数矩阵,输出其中的最大值,最小值,和他们的下标#include<stdio.h>intmain(){ inta[3][5],max,min,maxi,maxj,mini,minj; //最大值最小值,和下标分别定义变量存储 inti,j; for(i=0;i<3;i++) for(j=0;j<5;j++)......
  • 解锁数组操作的艺术:你的终极方法集指南(鸿蒙篇)
    数组在编程中扮演着重要的角色,它们允许我们存储和操作一系列的元素。以下是对数组操作方法的全面介绍:Array.concat()concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。constarray1=['a','b','c'];constarray2=['d','e','f'];......
  • Flutter 中的 Opacity 小部件:全面指南
    Flutter中的Opacity小部件:全面指南在Flutter中,动画和视觉效果是提升用户体验的重要手段。Opacity小部件允许你改变子组件的透明度,从而实现淡入、淡出或其它透明度相关的动画效果。本文将提供Opacity的全面指南,帮助你了解如何使用这个小部件来增强你的Flutter应用的视觉......
  • Flutter 中的 LimitedBox 小部件:全面指南
    Flutter中的LimitedBox小部件:全面指南Flutter是一个功能强大的UI框架,它提供了大量的小部件来帮助开发者构建美观且响应式的用户界面。在Flutter的布局小部件中,LimitedBox是一个不太常见但非常有用的组件,它可以用来限制其子组件的最大尺寸。本文将详细介绍Limited......
  • 【C语言】基于C语言实现的贪吃蛇游戏
    【C语言】基于C语言实现的贪吃蛇游戏......