【重新认识C语言----文件管理篇】

目录

​编辑

-----------------------------------------begin-------------------------------------

引言

1. 文件的基本概念

2. 文件指针

3. 文件的打开与关闭

3.1 打开文件

3.2 关闭文件

4. 文件的读写操作

4.1 读取文件

4.1.1 使用fgetc()读取文件

4.1.2 使用fgets()读取文件

4.1.3 使用fread()读取文件

4.2 写入文件

4.2.1 使用fputc()写入文件

4.2.2 使用fputs()写入文件

4.2.3 使用fwrite()写入文件

5. 文件的定位操作

5.1 使用fseek()定位文件指针

5.2 使用ftell()获取文件指针位置

5.3 使用rewind()重置文件指针

6. 文件的错误处理

6.1 使用feof()检查文件末尾

6.2 使用ferror()检查文件错误

7. 文件的删除与重命名

7.1 使用remove()删除文件

7.2 使用rename()重命名文件

8. 综合示例

结语

路过的佬们点点关注哦~

你们的鼓励是我前进的动力~

-------------------------------------------end-------------------------------------


-----------------------------------------begin-------------------------------------

引言

在C语言编程中,文件操作是一个非常重要的部分。无论是读取配置文件、保存数据,还是处理日志文件,文件操作都是不可或缺的。C语言提供了一套丰富的库函数来进行文件的创建、打开、读取、写入和关闭等操作。本文将详细介绍C语言中的文件操作,帮助读者深入理解并掌握这些操作。

1. 文件的基本概念

在C语言中,文件是存储在外部存储器(如硬盘、U盘等)上的数据集合。文件可以分为文本文件和二进制文件两种类型:

  • 文本文件:以字符形式存储数据,每个字符占用一个字节,通常用于存储可读的文本信息。

  • 二进制文件:以二进制形式存储数据,通常用于存储非文本数据,如图片、音频、视频等。

2. 文件指针

在C语言中,文件操作是通过文件指针来进行的。文件指针是一个指向FILE结构体的指针,FILE结构体包含了文件的相关信息,如文件的位置、缓冲区状态等。常用的文件指针类型是FILE*

FILE *fp;

3. 文件的打开与关闭

3.1 打开文件

在C语言中,使用fopen()函数来打开文件。fopen()函数的原型如下:

FILE *fopen(const char *filename, const char *mode);
  • filename:要打开的文件名。

  • mode:打开文件的模式,常见的模式有:

    • "r":只读模式,文件必须存在。

    • "w":只写模式,如果文件存在则清空文件内容,如果文件不存在则创建文件。

    • "a":追加模式,如果文件存在则在文件末尾追加内容,如果文件不存在则创建文件。

    • "r+":读写模式,文件必须存在。

    • "w+":读写模式,如果文件存在则清空文件内容,如果文件不存在则创建文件。

    • "a+":读写模式,如果文件存在则在文件末尾追加内容,如果文件不存在则创建文件。

    • "b":以二进制模式打开文件(可以与上述模式组合使用,如"rb""wb"等)。

示例:

FILE *fp;
fp = fopen("example.txt", "r");
if (fp == NULL) {printf("文件打开失败\n");return 1;
}

3.2 关闭文件

文件操作完成后,必须使用fclose()函数关闭文件,以释放资源并确保数据写入磁盘。fclose()函数的原型如下:

int fclose(FILE *stream);
  • stream:要关闭的文件指针。

示例:

fclose(fp);

4. 文件的读写操作

4.1 读取文件

C语言提供了多种读取文件的函数,常用的有:

  • fgetc():从文件中读取一个字符。

  • fgets():从文件中读取一行字符串。

  • fread():从文件中读取指定数量的数据块。

4.1.1 使用fgetc()读取文件

fgetc()函数用于从文件中读取一个字符,其原型如下:

int fgetc(FILE *stream);

示例:

int ch;
while ((ch = fgetc(fp)) != EOF) {putchar(ch);
}
4.1.2 使用fgets()读取文件

fgets()函数用于从文件中读取一行字符串,其原型如下:

char *fgets(char *str, int n, FILE *stream);
  • str:存储读取内容的缓冲区。

  • n:最多读取的字符数(包括结尾的\0)。

  • stream:文件指针。

示例:

char buffer[100];
while (fgets(buffer, sizeof(buffer), fp) != NULL) {printf("%s", buffer);
}
4.1.3 使用fread()读取文件

fread()函数用于从文件中读取指定数量的数据块,其原型如下:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  • ptr:存储读取数据的缓冲区。

  • size:每个数据块的大小。

  • nmemb:要读取的数据块数量。

  • stream:文件指针。

示例:

char buffer[100];
size_t num = fread(buffer, sizeof(char), sizeof(buffer), fp);
if (num > 0) {buffer[num] = '\0';  // 添加字符串结束符printf("%s", buffer);
}

4.2 写入文件

C语言提供了多种写入文件的函数,常用的有:

  • fputc():向文件中写入一个字符。

  • fputs():向文件中写入一个字符串。

  • fwrite():向文件中写入指定数量的数据块。

4.2.1 使用fputc()写入文件

fputc()函数用于向文件中写入一个字符,其原型如下:

int fputc(int c, FILE *stream);

示例:

fputc('A', fp);
4.2.2 使用fputs()写入文件

fputs()函数用于向文件中写入一个字符串,其原型如下:

int fputs(const char *str, FILE *stream);

示例:

fputs("Hello, World!\n", fp);
4.2.3 使用fwrite()写入文件

fwrite()函数用于向文件中写入指定数量的数据块,其原型如下:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
  • ptr:要写入的数据的指针。

  • size:每个数据块的大小。

  • nmemb:要写入的数据块数量。

  • stream:文件指针。

示例:

char buffer[] = "Hello, World!";
fwrite(buffer, sizeof(char), sizeof(buffer), fp);

5. 文件的定位操作

在文件操作中,有时需要移动文件指针到指定位置进行读写操作。C语言提供了以下函数来实现文件指针的定位:

  • fseek():移动文件指针到指定位置。

  • ftell():获取文件指针的当前位置。

  • rewind():将文件指针移动到文件开头。

5.1 使用fseek()定位文件指针

fseek()函数用于移动文件指针到指定位置,其原型如下:

int fseek(FILE *stream, long offset, int whence);
  • stream:文件指针。

  • offset:偏移量。

  • whence:起始位置,可以是以下值之一:

    • SEEK_SET:文件开头。

    • SEEK_CUR:当前位置。

    • SEEK_END:文件末尾。

示例:

fseek(fp, 10, SEEK_SET);  // 将文件指针移动到文件开头后的第10个字节

5.2 使用ftell()获取文件指针位置

ftell()函数用于获取文件指针的当前位置,其原型如下:

long ftell(FILE *stream);

示例:

long pos = ftell(fp);
printf("当前文件指针位置:%ld\n", pos);

5.3 使用rewind()重置文件指针

rewind()函数用于将文件指针移动到文件开头,其原型如下:

void rewind(FILE *stream);

示例:

rewind(fp);  // 将文件指针移动到文件开头

6. 文件的错误处理

在文件操作过程中,可能会遇到各种错误,如文件打开失败、读写错误等。C语言提供了以下函数来处理文件操作中的错误:

  • feof():检查文件是否到达末尾。

  • ferror():检查文件操作是否出错。

6.1 使用feof()检查文件末尾

feof()函数用于检查文件是否到达末尾,其原型如下:

int feof(FILE *stream);

示例:

while (!feof(fp)) {int ch = fgetc(fp);if (ch != EOF) {putchar(ch);}
}

6.2 使用ferror()检查文件错误

ferror()函数用于检查文件操作是否出错,其原型如下:

int ferror(FILE *stream);

示例:

if (ferror(fp)) {printf("文件操作出错\n");
}

7. 文件的删除与重命名

C语言提供了remove()rename()函数来删除和重命名文件。

7.1 使用remove()删除文件

remove()函数用于删除文件,其原型如下:

int remove(const char *filename);

示例:

if (remove("example.txt") == 0) {printf("文件删除成功\n");
} else {printf("文件删除失败\n");
}

7.2 使用rename()重命名文件

rename()函数用于重命名文件,其原型如下:

int rename(const char *old_filename, const char *new_filename);

示例:

if (rename("old.txt", "new.txt") == 0) {printf("文件重命名成功\n");
} else {printf("文件重命名失败\n");
}

8. 综合示例

#include <stdio.h>int main() {FILE *fp;char buffer[100];// 打开文件fp = fopen("example.txt", "r+");if (fp == NULL) {printf("文件打开失败\n");return 1;}// 读取文件内容printf("文件内容:\n");while (fgets(buffer, sizeof(buffer), fp) != NULL) {printf("%s", buffer);}// 写入文件内容fseek(fp, 0, SEEK_END);  // 将文件指针移动到文件末尾fputs("这是新写入的内容\n", fp);// 关闭文件fclose(fp);return 0;
}

结语

通过本文的介绍,相信读者已经对C语言中的文件操作有了深入的理解。文件操作是C语言编程中非常重要的一部分,掌握这些操作可以帮助我们更好地处理文件数据。希望本文能够对读者在实际编程中有所帮助。

路过的佬们点点关注哦~

你们的鼓励是我前进的动力~

-------------------------------------------end-------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13961.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面解析String类

一、String 类初相识 在 C 语言的世界里&#xff0c;字符串是以\0结尾的字符集合&#xff0c;为了方便操作&#xff0c;C 标准库提供了一系列str系列的库函数&#xff0c;如strcpy、strcat、strlen等。虽然这些库函数在一定程度上满足了我们对字符串的操作需求&#xff0c;但是…

pycharm 中的 Mark Directory As 的作用是什么?

文章目录 Mark Directory As 的作用PYTHONPATH 是什么PYTHONPATH 作用注意事项 Mark Directory As 的作用 可以查看官网&#xff1a;https://www.jetbrains.com/help/pycharm/project-structure-dialog.html#-9p9rve_3 我们这里以 Mark Directory As Sources 为例进行介绍。 这…

MySQL - 字段内分组

1、MySQL 5.7及之前版本 SELECT A.要显示的字段名称,FIRST_VALUE : A.分组字段名称,last :IF(FIRST_VALUE A.分组字段名称, last 1, 1 ) AS rn,FROM 表1 A,(SELECT last : 0, FIRST_VALUE : NULL ) BORDER BY A.排序字段例&#xff1a;SELECT A.DLR_CODE,A.VAILD_CARD_NO,A.L…

瞬态分析中的时域分析与频域分析:原理、对比与应用指南

目录 一、核心概念区分 二、时域分析&#xff1a;时间维度直接求解 1. 基本原理 2. 关键特点 3. 典型算法 4. 应用案例 三、频域分析&#xff1a;频率维度的等效映射 1. 基本原理 2. 关键特点 3. 典型方法 4. 应用案例 四、对比与选择依据 1. 方法论对比 2. 工程…

【DeepSeek】DeepSeek小模型蒸馏与本地部署深度解析DeepSeek小模型蒸馏与本地部署深度解析

一、引言与背景 在人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;如DeepSeek以其卓越的自然语言理解和生成能力&#xff0c;推动了众多应用场景的发展。然而&#xff0c;大型模型的高昂计算和存储成本&#xff0c;以及潜在的数据隐私风险&#xff0c;限制了…

安卓/ios脚本开发按键精灵经验小分享

1. 程序的切换 我们经常碰到这样的需求&#xff1a;打开最近的应用列表&#xff0c;选取我们想要的程序。但是每个手机为了自己的风格&#xff0c;样式都有区别&#xff0c;甚至连列表的滑动方向都不一样&#xff0c;我们很难通过模拟操作来识别点击&#xff0c;那么我们做的只…

camera光心检测算法

1.概要 光心检测算法&#xff0c;基于opencv c实现&#xff0c;便于模组厂快速集成到软件工具中&#xff0c;适用于camera模组厂算法评估组装制程镜头与sensor的偏心程度&#xff0c;便于工程师了解制程的问题找出改善方向。 2.技术介绍 下图为camera模组厂抓取的bayer-raw经过…

OpenCV:特征检测总结

目录 一、什么是特征检测&#xff1f; 二、OpenCV 中的常见特征检测方法 1. Harris 角点检测 2. Shi-Tomasi 角点检测 3. Canny 边缘检测 4. SIFT&#xff08;尺度不变特征变换&#xff09; 5. ORB 三、特征检测的应用场景 1. 图像匹配 2. 运动检测 3. 自动驾驶 4.…

Docker安装pypiserver私服

Docker安装pypiserver私服 1 简介 Python开源包管理工具有pypiserver、devpi和Nexus等&#xff0c;pypiserver安装部署比较简单&#xff0c;性能也不错。 搭建pypiserver私服&#xff0c;可以自己构建镜像&#xff0c;也可以使用官网的docker镜像。 # Github地址 https://g…

什么是自动化测试?自动化测试的作用

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、自动化测试 所谓的自动化测试简单来说就是有计算机代替 人来单击被测软件的界面&#xff0c;执行一系列操作并进行验证。 自动化有点&#xff1a;通过执行…

AI驱动的智能流程自动化是什么

在当今快速发展的数字化时代&#xff0c;企业正在寻找更高效、更智能的方式来管理日常运营和复杂任务。其中&#xff0c;“AI驱动的智能流程自动化”&#xff08;Intelligent Process Automation, IPA&#xff09;成为了一个热门趋势。通过结合人工智能&#xff08;AI&#xff…

集合类不安全问题

ArrayList不是线程安全类&#xff0c;在多线程同时写的情况下&#xff0c;会抛出java.util.ConcurrentModificationException异常 解决办法&#xff1a; 1.使用Vector&#xff08;ArrayList所有方法加synchronized&#xff0c;太重&#xff09; 2.使用Collections.synchronized…

私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片)

私有化部署DeepSeek并SpringBoot集成使用&#xff08;附UI界面使用教程-支持语音、图片&#xff09; windows部署ollama Ollama 是一个开源框架&#xff0c;专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计 下载ollama 下载地址&#xff08;m…

Verilog代码实例

Verilog语言学习&#xff01; 文章目录 目录 文章目录 前言 一、基本逻辑门代码设计和仿真 1.1 反相器 1.2 与非门 1.3 四位与非门 二、组合逻辑代码设计和仿真 2.1 二选一逻辑 2.2 case语句实现多路选择逻辑 2.3 补码转换 2.4 7段数码管译码器 三、时序逻辑代码设计和仿真 3.1…

二级C语言题解:十进制转其他进制、非素数求和、重复数统计

目录 一、程序填空&#x1f4dd; --- 十进制转其他进制 题目&#x1f4c3; 分析&#x1f9d0; 二、程序修改&#x1f6e0;️ --- 非素数求和 题目&#x1f4c3; 分析&#x1f9d0; 三、程序设计&#x1f4bb; --- 重复数统计 题目&#x1f4c3; 分析&#x1f9d0; 前言…

BFS算法——广度优先搜索,探索未知的旅程(下)

文章目录 前言一. N叉树的层序遍历1.1 题目链接&#xff1a;https://leetcode.cn/problems/n-ary-tree-level-order-traversal/description/1.2 题目分析&#xff1a;1.3 思路讲解&#xff1a;1.4 代码实现&#xff1a; 二. 二叉树的锯齿形层序遍历2.1 题目链接&#xff1a;htt…

软件系统性能测试的重要性和测试类型分享

在现代软件开发领域&#xff0c;软件系统性能测试的重要性愈发凸显。软件系统性能测试是一种评估软件应用程序在特定工作负载下的响应时间、稳定性和资源消耗的测试过程。其目标是识别性能瓶颈&#xff0c;确保软件在不同的负载条件下依然能够高效运行。 一、软件系统性能测试…

Three.js 实现海面效果

Three.js 实现海面效果 https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idoceanShader import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { Water } from three/examples/js…

C++----继承

一、继承的基本概念 本质&#xff1a;代码复用类关系建模&#xff08;是多态的基础&#xff09; class Person { /*...*/ }; class Student : public Person { /*...*/ }; // public继承 派生类继承基类成员&#xff08;数据方法&#xff09;&#xff0c;可以通过监视窗口检…

【MySQL】第二弹---数据库基础全解析:从概念到实践的深度探索

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1. 数据库基础 1.1 什么是数据库 1.2 主流数据库 1.3 基本使用 1.3.1 MySQL安装 1.3.2 连接服务器 1.3.3 服务器…