C 语言 第八章 文件操作

目录

文件操作

文件和流的介绍

[C 输入 & 输出](#C 输入 & 输出)

[C 文件的读写](#C 文件的读写)

创建/打开文件

写入文件

[fputc 函数](#fputc 函数)

[fputs 函数](#fputs 函数)

[fprintf 函数](#fprintf 函数)

实例:

读取文件

fgets函数

实例:

关闭文件


文件操作


文件和流的介绍


变量、数组、结构体等数据在运行时存储于内存中,程序结束后内存数据会被释放。若需长久保存数据,可写入文件或数据库。

文件是数据源的一种(如 word 文档、txt 文件、excel 文件、avi 文件等),作用是保存数据(如图像、视频、声音等)。

在 C 程序中,文件数据的输入/输出以"流(stream)"方式进行:

  • 输入流:数据从数据源(如文件)流向程序(或内存)。
  • 输出流:数据从程序(或内存)流向数据源(如文件)。

C 输入 & 输出


  • 输入:向程序(或内存)写入数据,数据可来自键盘、文件或网络。C 语言通过内置函数读取输入并写入程序。

  • 输出:在屏幕、打印机或文件中显示(或保存)数据。C 语言通过内置函数将数据输出到指定载体。

注: scanf() 和 printf() 函数:C 语言 I/O(输入/输出)常用这两个函数。

  • int scanf(const char *format,...) :从标准输入流 stdin 读取输入,按 format 解析输入。
  • int printf(const char *format,...) :将输出写入标准输出流 stdout ,按格式产生输出。

实例:

cs 复制代码
  
#include <stdio.h>  
int main( ) {  
    int i;  
    printf( "Enter a value :\n"); // 标准输出函数  
    scanf("%d", &i); // 标准输入函数  
    printf( "You entered: %d \n", i);  
    return 0;  
}  

C 文件的读写

文件(无论是文本文件还是二进制文件)都代表一系列字节。C 语言既提供顶层访问函数,也提供底层调用处理存储设备上的文件。

创建/打开文件


使用 fopen() 函数创建或打开文件,初始化 FILE 类型对象(包含控制流的必要信息)。

函数原型:

cs 复制代码
 FILE* fopen(const char* filename, const char* mode); 

说明: filename 是字符串,用来命名文件,mode 访问模式:

|----|-------------------------------|
| 模式 | 描述 |
| r | 只读,打开已有文本文件。 |
| w | 只写,文件不存在则创建,存在则截断(清空原有内容)后写入。 |
| a | 追加写,文件不存在则创建,存在则从文件末尾写入。 |

写入文件


C标准库提供按字符或固定长度字符串形式读/写文件的函数。

fputc 函数

函数原型:

cs 复制代码
 int fputc(int c, FILE* fp); 

说明: 将参数 c 的字符值写入 fp 指向的输出流,成功返回写入的字符。

fputs 函数

函数原型:

cs 复制代码
int fputs(const char* s, FILE* fp); 

说明: 将字符串 s 写入 fp 指向的输出流,成功返回非负值,出错返回 EOF 。

fprintf 函数

函数原型:

cs 复制代码
int fprintf(FILE* fp, const char *format,...); 

**功能:**与 fputs() 类似,将字符串写入文件。


实例:
cs 复制代码
#include <stdio.h>  
int main() {  
    //创建一个文件指针  
    FILE *fp = NULL;  
    //打开该文件  
    fp = fopen("D:/demo.txt", "w");  
    //将内容写入到文件中  
    fputs("你好,北京!\n", fp);  
    fprintf(fp, "你好,世界!\n");  
    //关闭文件(确保内容保存)  
    fclose(fp);  
    printf("创建,写入信息完成");  
}  
 
 

读取文件


fgets函数

函数原型:

cs 复制代码
 char* fgets(char *buf, int n, FILE *fp); 

**说明:**此函数按行读取数据,从文件中读取一行数据(包括换行符'\n'),并将内容存储到指定缓冲区 buf 。 n 是缓冲区大小, fp 是文件指针。成功读取返回 buf (字符串首地址),到达文件末尾或读取失败返回 NULL 。

实例:
cs 复制代码
#include <stdio.h>  
int main() {  
    //创建一个文件指针  
    FILE* fp = NULL;  
    //定义一个缓冲区  
    char buff[1024];  
    //打开文件  
    fp = fopen("D:/demo.txt", "r");  
    //循环读取fp指向的文件内容,读到NULL时结束  
    while (fgets(buff, 1024, fp) != NULL) {  
        printf("%s", buff);  
    }  
}

关闭文件


使用完文件后(读,写),一定要将该文件关闭。

关闭文件,使用 fclose() 函数。

函数原型:

cs 复制代码
 int fclose( FILE* fp ); 

如果成功关闭文件, fclose() 函数返回零。此时,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。

相关推荐
水w2 小时前
【Python爬虫】简单案例介绍1
开发语言·爬虫·python
qq_365911604 小时前
GPT-4、Grok 3与Gemini 2.0 Pro:三大AI模型的语气、风格与能力深度对比
开发语言
虔城散人5 小时前
C语言 |位域结构体
c语言
Susea&5 小时前
数据结构初阶:队列
c语言·开发语言·数据结构
慕容静漪5 小时前
如何本地安装Python Flask并结合内网穿透实现远程开发
开发语言·后端·golang
ErizJ5 小时前
Golang|锁相关
开发语言·后端·golang
GOTXX5 小时前
【Qt】Qt Creator开发基础:项目创建、界面解析与核心概念入门
开发语言·数据库·c++·qt·图形渲染·图形化界面·qt新手入门
搬砖工程师Cola5 小时前
<C#>在 .NET 开发中,依赖注入, 注册一个接口的多个实现
开发语言·c#·.net
巨龙之路5 小时前
Lua中的元表
java·开发语言·lua
徐行1106 小时前
C++核心机制-this 指针传递与内存布局分析
开发语言·c++