C语言--文件操作
目录一认识文件1文件名2两种文件二文件操作1认识流和标准流2文件指针3文件的打开与关闭三文件的顺序读写1fputc和fgetc2fputs和fgets3,fprintf和fscanf4fwrite和fread四输入流和输出流1所有输入流2所有输出流3格式化数据的含义4两组函数功能的对比5补充函数sprintf和sscanf五文件的随机读写1fseek2ftell3rewind六文件读取结束的判定1判定读取结束2文件的拷贝七文件缓冲区一认识文件1文件名文件名分为三部分文件路径文件名主干文件后缀例如D:/code/test.cD:/code 就是文件路径test就是文件主干 .c就是文件后缀决定了文件的默认打开方式注意1文件名不能包含的字符\ / : * ? |2文件名不一定包含后缀名2两种文件从程序设计的角度有两种文件程序文件、数据文件为什么要使用文件当我们不使用文件时写的程序数据存储电脑的内存中执行完后内存就释放数据就丢失了如果想要数据完整并永久保存就需要使用文件。1程序文件程序文件包括源程序文件后缀为.c、目标文件后缀为.obj、可执行程序后缀为.exe2数据文件数据文件是程序进行执行时需要从中读取数据的文件或者输出内容的文件。其中数据文件又被分为文本文件和二进制文件二进制文件数据在内存中以二进制的形式存储不加任何形式的转化直接存入外存的文件。文本文件内存中的数据经过ASCII码值转化到外存中以ASCII字符形式存储的的文件。数据是如何存储到文件中的如果是字符就以ASCII码值的形式存储如果是数值型的数据则可以以ASCII码值的形式存储也可以以二进制的形式存储例如有整数10000想要进行存储则以ASCII码值存储需要5个字节以二进制存储需要4个字节二文件操作文件操作分为三步1打开文件 2读写文件 3关闭文件在真正进行文件操作前首先要认识流和标准流的概念1认识流和标准流在执行程序时我们需要从外部设备获取数据同时也需要输出数据到外部设备中不同的设备的输入输出的操作方式不一样。如下图为了方便操作引出了流的概念之后我们进行数据的写入和输出只需要操作流即可。标准流C语言在启动时就会默认打开三个流stdin:标准输入流通常来自键盘文件或其他程序的输入scanf就是从标准流中读取数据。stdout:标准输出流通常输出到屏幕文件中printf函数就是将信息输出到标准输出流中。stderr:标准错误流通常输出到屏幕上。stdin、stdout、stderr这三个流的类型都是FILE*称为文件指针。C语言中就是通过FILE*的文件指针来维护流的各种操作的2文件指针每一个文件在内存中都被开辟了一个文件信息区结构体这个文件信息区用来存放文件的相关信息。该结构体通用起名为FILE。该结构体的地址就是文件指针文件指针通过地址找到文件信息区文件信息区再找到文件。创建一个文件指针FILE* pf;3文件的打开与关闭打开文件语法FILE* fopen(const char* filename,const char* mode);filename为打开的文件名主干加后缀mode表示打开方式有以下打开方式关闭文件语法int fclose(FILE* stream);stream为文件指针流举例三文件的顺序读写1fputc和fgetcfputc函数核心功能向文件中写入单个字符语法int putc(int c,FILE* stream);c为要写入的字符stream表示文件指针流成功时返回写入的字符的ASCII码值失败时返回EOF(-1)使用案例fgetc函数核心功能从文件中读取单个字符语法int fgetc(FILE* stream);stream为文件指针流成功时返回读取到的字符的ASCII码值失败时或读取到文件末尾返回EOF(-1)使用案例2fputs和fgetsfputs函数核心功能向文件中写入字符串语法int fputs(const char str,FILE* stream);str是要输入的字符串stream是文件指针流成功时返回非负整数失败时返回EOF(-1)使用案例fgets函数核心功能从文件中读取一行字符串语法char* fgets(char* str,int n,FILE* stream);str为用于存储字符串的字符数组n表示从文件中取出的字符个数算上\0所以实际取出n-1个字符stream表示文件指针流成功时返回指向str的指针失败或者到文件末尾时返回NULL使用案例当n-1小于字符个数时先打印n-1个下次循环打印剩下部分当n-1大于字符个数时打印完即可3,fprintf和fscanf1,fprintf函数类比printfint printf(const char* format……)核心功能与printf类似不过printf是将内容输出到标准输出(一般是屏幕)而fprintf函数是将内容输出到指定的文件流或标准流当中头文件#include stdio.h语法int fprintf(FILE *stream,const char* format……);stream(文件指针 )指向已经打开的文件流format为格式化的字符串与printf中的内容相同返回值成功时返回写入的字符数失败时返回负数运用实例2fscanf函数类比scanfint scanf(const char* format,……核心功能与scanf类似scanf为将格式化数据输出到标准输出流中 fscanf为从指定的输入流文件流或标准流中读取数据头文件#include stdio.h语法int fscanf(FILE *stream,const char* format,……);参数含义与fprintf相同返回值成功时返回读取到的数据个数读到文件末尾或发生错误时返回EOF(-1)运用展示结果张三 20 65.500000上述是输出到文件流当中的情况将内容输出到标准输出流当中的情况:结果在屏幕上打印张三 20 65.5000004fwrite和freadfwrite函数核心功能以二进制的形式将原始内存数据写入到文件当中适合非文本数据图像音频结构体数组等的写入语法size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);ptr:要写入的内存块的指针size:要写入的一个数据项的大小nmemb要写入的数据项的数量stream文件指针流指向要被写入的文件返回值成功时输出成功传入的数据项的个数如果与nmemb不相等表示写入出错或到达文件末尾运用实例fread函数核心功能从文件中以二进制形式读取原始内存数据适合读取非文本数据。语法size_t fread(void* ptr,size_t size,size_t nmemb,FILE *stream);参数内容含义与fwrite函数一样不过改成从pf中读取数据到ptr当中返回值成功读取的数据项数量如果返回值小于nmemb,则可能表示1到达文件末尾(EOF)2读取错误3实际读取的项数不足运用实例运行结果1 2 3 4 5四输入流和输出流1所有输入流1标准输入流--stdin--键盘输入函数scanf, getchar, gets.2,文件输入流--FILE* 打开的文件只读r函数fscanf, fgets, fgetc, fread3,字符串输入流--从字符串中读数据函数sscanf2所有输出流1标准输出流--stdout 通常输出到屏幕中 printf就是将内容输出到标准输出流当中2标准错误输出--stderr 打印错误信息(通常是屏幕)3stdprn--不常用3格式化数据的含义格式化数据按照固定格式读写的数据格式化就是将数据转化为人类能看懂的文本用格式说明符控制%d %f %c %s非格式化看不懂供机器使用例如fread,fwrite4两组函数功能的对比5补充函数sprintf和sscanfsprintf函数核心功能把格式化数据转化成字符串传入到字符数组当中头文件#include stdio.h语法int sprintf(char* str,const char* format……)str为指向目标字符数组的指针用于存放生成的字符串。字符指针的大小必须足够大容纳输入的所有的内容。format:名为格式化的字符串与printf中的类似。返回值如果成功则返回写入的字符总数(不包括结尾的\0)如果失败则返回一个负数。sscanf函数核心功能从字符串中读取格式化数据到变量中头文件#include stdio.h语法int sscanf(const char *str,const char format,……)str源字符串从中读取数据format:格式化字符串与scanf中的类似。返回值成功读入并赋值的变量个数一个都没有读入进去返回0在第一个读入前就结束返回EOF(-1)运用实例五文件的随机读写1fseek核心功能根据文件指针的位置和偏移量改变文件指针位置语法int fseek(FILE *stream,long int offset,int origin);stream表示文件指针流offset表示偏移量可正可负origin表示起始位置有三个取值1,SEEK_SET(0)从文件开头开始2,SEEK_CUR(1)从当前位置开始3,SEEK_END(2)从文件末尾开始返回值如果成功返回0如果失败返回非零值运用展示2ftell核心功能返回文件指针相对于起始位置的偏移量语法long int ftell(FILE *stream);stream表示文件指针流返回值如果成功返回相对起始位置的偏移量失败则返回-1L(长整型的-1)运用实例3rewind核心功能让文件指针返回到文件的起始位置语法void rewind(FILE *stream);stream为文件指针流六文件读取结束的判定1判定读取结束打开一个流的时候这个流上有两个标记值1是否遇到文件末尾2是否发生错误这两种情况是文件读取结束的两种原因进行读取时使用这两种函数1fgetc--如果读取正常返回读取到的字符的ASCII码值如果读取失败或遇到文件末尾就返回EOF(-1)2,fgets--如果读取正常返回存储读取到的字符串的字符数组的地址如果读取失败或遇到文件末尾就返回NULL此时再通过两个函数判断文件读取结束的原因1判断是否遇到文件末尾int feof(FILE *stream);如果到达末尾就返回非零值没到达末尾就返回02判断是否发生错误int ferror(FILE *stream);出现错误返回非零没有错误返回0运用实例2文件的拷贝七文件缓冲区内存不会直接向硬盘/文件输入数据而是会先将数据输送到文件缓冲区当中然后当缓冲区装满时再通过文件缓冲区传入硬盘/文件当中。从磁盘/文件中读取数据也是同理会先将数据读取到文件缓冲区当中再将数据逐个传入到程序数据区当中。文件缓冲区的大小由编译器决定。

相关新闻

如何在3分钟内免费激活Windows系统:KMS_VL_ALL_AIO完整指南

如何在3分钟内免费激活Windows系统:KMS_VL_ALL_AIO完整指南

如何在3分钟内免费激活Windows系统:KMS_VL_ALL_AIO完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活而烦恼吗?每次开机看到那个烦人的激活提…

2026/7/26 11:31:24 阅读更多 →
TMS320C6474 DSP中断系统深度解析:从事件路由到多核优化实践

TMS320C6474 DSP中断系统深度解析:从事件路由到多核优化实践

1. 中断控制器架构与核心设计思路在嵌入式DSP系统开发中,中断机制的设计直接决定了系统的实时响应能力和整体效率。TMS320C6474作为一款面向高性能计算和实时信号处理的三核DSP,其中断系统的复杂度远超普通的微控制器。我刚接触C6474时,面对手…

2026/7/26 11:30:24 阅读更多 →
从零到一:raylib游戏开发终极入门指南

从零到一:raylib游戏开发终极入门指南

从零到一:raylib游戏开发终极入门指南 【免费下载链接】raylib A simple and easy-to-use library to enjoy videogames programming 项目地址: https://gitcode.com/GitHub_Trending/ra/raylib 你是否曾经梦想过创建自己的游戏,却被复杂的图形AP…

2026/7/26 11:30:24 阅读更多 →

最新新闻

研究生论文AI检测规避与改写工具全攻略

研究生论文AI检测规避与改写工具全攻略

1. 研究生学术研究工具现状剖析读研期间最让人头疼的莫过于论文写作过程中的AI检测问题。去年帮导师审阅研究生论文时,发现近30%的投稿都存在AI生成痕迹被系统标记的情况。这直接导致许多同学的论文被期刊拒稿或要求重大修改,严重影响了毕业进度。目前主…

2026/7/26 11:38:27 阅读更多 →
TMS320VC5502 DSP核心架构解析:引脚复用、时钟管理与低功耗设计实战

TMS320VC5502 DSP核心架构解析:引脚复用、时钟管理与低功耗设计实战

1. 项目概述:深入理解一颗经典的DSP芯片在嵌入式信号处理领域,德州仪器(TI)的C55x系列DSP曾是一代经典。今天要聊的这颗TMS320VC5502,虽然其数据手册的修订历史可以追溯到2001年,但其中蕴含的设计思想、外设…

2026/7/26 11:38:27 阅读更多 →
TMS320VC5502 DSP外设寄存器配置实战:从GPIO到总线控制的底层硬件编程

TMS320VC5502 DSP外设寄存器配置实战:从GPIO到总线控制的底层硬件编程

1. 项目概述与核心价值如果你正在使用德州仪器(TI)的TMS320VC5502这款经典的定点数字信号处理器(DSP)进行嵌入式开发,那么你迟早会走到这一步:直接与硬件寄存器打交道。无论是想点亮一个LED,还是…

2026/7/26 11:38:27 阅读更多 →
AI辅助技术写作:提升效率与保持专业性的实践指南

AI辅助技术写作:提升效率与保持专业性的实践指南

如果你还在为技术博客写作效率低下而苦恼,那么宝玉的AI辅助写作经验或许能给你带来启发。作为一名资深技术作者,宝玉最近分享了他在实际项目中如何将AI工具融入写作流程,不仅提升了内容产出速度,更关键的是保持了技术深度和可读性…

2026/7/26 11:38:26 阅读更多 →
WinPython终极指南:5分钟打造便携式Windows Python开发环境,告别配置烦恼

WinPython终极指南:5分钟打造便携式Windows Python开发环境,告别配置烦恼

WinPython终极指南:5分钟打造便携式Windows Python开发环境,告别配置烦恼 【免费下载链接】winpython A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python. 项目地址: https://gitcode.com/gh_mirr…

2026/7/26 11:38:26 阅读更多 →
解决Windows系统MSWB70804.dll缺失问题的完整指南

解决Windows系统MSWB70804.dll缺失问题的完整指南

1. 问题现象与基本判断最近帮同事处理电脑问题时,遇到一个典型的系统报错:"无法启动此程序,因为计算机中丢失MSWB70804.dll。尝试重新安装该程序以解决此问题"。这种dll文件缺失的提示在Windows系统中相当常见,但很多用…

2026/7/26 11:37:26 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻