首页 > 其他分享 >C 语言文件读写操作详解

C 语言文件读写操作详解

时间:2024-11-13 10:45:26浏览次数:3  
标签:文件 file return 语言 读写操作 int 详解 FILE printf

目录

C 语言文件读写操作详解

引言

1. 文件操作基本概念

2. 文件打开

3. 文件关闭

4. 文件写入

5. 文件读取

6. 逐行读取文件

7. 文件定位

8. 文件大小

9. 二进制文件读写


C 语言文件读写操作详解

引言

C 语言提供了丰富的文件操作函数,使得读取和写入文件变得非常方便。本文将详细介绍 C 语言中常用的文件读写操作,包括文件打开、关闭、读取和写入等基本操作,并提供具体的示例代码。

1. 文件操作基本概念

在 C 语言中,文件操作主要通过 FILE 类型的指针来实现。FILE 是一个结构体类型,定义在 <stdio.h> 头文件中。文件操作的基本流程通常包括以下几个步骤:

  1. 打开文件
  2. 读取或写入文件
  3. 关闭文件
2. 文件打开

使用 fopen 函数打开文件。fopen 函数的原型如下:

FILE *fopen(const char *filename, const char *mode);
  • filename:要打开的文件名。
  • mode:打开文件的模式,常见的模式有:
    • "r":只读模式,文件必须存在。
    • "w":写入模式,如果文件存在则清空内容,如果文件不存在则创建新文件。
    • "a":追加模式,如果文件存在则在文件末尾追加内容,如果文件不存在则创建新文件。
    • "rb""wb""ab":以二进制模式打开文件,分别对应只读、写入和追加模式。

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    // 文件操作...
    fclose(file);
    return 0;
}
3. 文件关闭

使用 fclose 函数关闭文件。fclose 函数的原型如下:

int fclose(FILE *stream);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    // 文件操作...
    fclose(file);
    return 0;
}
4. 文件写入

使用 fprintf 函数向文件写入格式化的字符串。fprintf 函数的原型如下:

int fprintf(FILE *stream, const char *format, ...);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    fprintf(file, "Hello, World!\n");
    fclose(file);
    return 0;
}
5. 文件读取

使用 fscanf 函数从文件读取格式化的字符串。fscanf 函数的原型如下:

int fscanf(FILE *stream, const char *format, ...);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    char buffer[100];
    fscanf(file, "%s", buffer);
    printf("读取的内容: %s\n", buffer);
    fclose(file);
    return 0;
}
6. 逐行读取文件

使用 fgets 函数逐行读取文件。fgets 函数的原型如下:

char *fgets(char *str, int n, FILE *stream);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("读取的内容: %s", buffer);
    }
    fclose(file);
    return 0;
}
7. 文件定位

使用 fseek 函数移动文件指针的位置。fseek 函数的原型如下:

int fseek(FILE *stream, long offset, int whence);
  • offset:偏移量。
  • whence:偏移的参考位置,常见的值有:
    • SEEK_SET:文件开头。
    • SEEK_CUR:当前位置。
    • SEEK_END:文件末尾。

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    char buffer[100];
    fseek(file, 10, SEEK_SET); // 移动到第10个字节
    fgets(buffer, sizeof(buffer), file);
    printf("读取的内容: %s", buffer);
    fclose(file);
    return 0;
}
8. 文件大小

使用 ftell 函数获取文件指针的当前位置,从而计算文件大小。ftell 函数的原型如下:

long ftell(FILE *stream);

示例代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    fseek(file, 0, SEEK_END);
    long size = ftell(file);
    printf("文件大小: %ld 字节\n", size);
    fclose(file);
    return 0;
}
9. 二进制文件读写

使用 freadfwrite 函数读写二进制文件。freadfwrite 函数的原型如下:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

示例代码:

#include <stdio.h>

struct Person {
    char name[50];
    int age;
};

int main() {
    struct Person person = {"Alice", 30};
    FILE *file = fopen("data.bin", "wb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    fwrite(&person, sizeof(struct Person), 1, file);
    fclose(file);

    struct Person read_person;
    file = fopen("data.bin", "rb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }
    fread(&read_person, sizeof(struct Person), 1, file);
    printf("读取的内容: 名字=%s, 年龄=%d\n", read_person.name, read_person.age);
    fclose(file);
    return 0;
}

标签:文件,file,return,语言,读写操作,int,详解,FILE,printf
From: https://blog.csdn.net/licy__/article/details/143701566

相关文章

  • C语言指针详解:用法与实例
    目录C语言指针详解:用法与实例引言1.指针基础1.1什么是指针?1.2如何声明指针?1.3获取变量的地址1.4解引用指针2.指针的高级用法2.1指针和数组2.2指针和函数参数2.3指针和动态内存分配3.指针的注意事项3.1空指针3.2悬空指针3.3指针运算C语言指针详......
  • 高级算法LLM大语言模型算法特训 带你转型AI大语言模型算法工程师
    高级算法LLM大语言模型算法特训:转型AI大语言模型算法工程师的指南随着人工智能技术的飞速发展,大语言模型(LargeLanguageModel,LLM)作为自然语言处理(NLP)领域的重要组成部分,正逐步成为各行各业的关键技术支撑。本文将深入探讨高级算法LLM大语言模型算法特训的内容、过程及如何通过......
  • 【0x001A】HCI_Write_Scan_Enable详解
    目录一、命令概述二、命令格式及参数说明2.1. HCIWriteScanEnable命令格式2.2. Scan_Enable三、响应事件及参数说明3.1. HCI_Command_Complete事件3.2. Status四、命令执流程4.1.命令发起与准备4.2.命令传输4.3.命令接收与解析(蓝牙控制器端)4.4.扫描功能......
  • ES6常见语法详解
    原文链接:ES6常见语法详解–每天进步一点点0.什么是ES6ES的全称是ECMAScript,它是由ECMA国际标准化组织,制定的一项脚本语言的标准化规范。ES6实际上是一个泛指,泛指ES2015及后续的版本。1.let、const、var的区别let是es6中新增的语法let只对当前区块定义有效:......
  • 【金融风控】特征评估与筛选详解
    内容介绍掌握单特征分析的衡量指标知道IV,PSI等指标含义知道多特征筛选的常用方法掌握Boruta,VIF,RFE,L1等特征筛选的使用方法【理解】单特征分析什么是好特征从几个角度衡量:覆盖度,区分度,相关性,稳定性覆盖度采集类,授权类,第三方数据在使用前都会分析覆盖度采......
  • 【金融风控】特征构造及代码详解
    介绍知道未来信息的概念,及处理未来信息的方法掌握从原始数据构造出新特征的方法掌握特征变换的方法掌握缺失值处理的方法【理解】数据准备风控建模特征数据数据来源人行征信数据查询原因包括:贷款审批、贷后管理、信用卡审批、担保资格审查、司法调查、......
  • SMoA: 基于稀疏混合架构的大语言模型协同优化框架
    在大语言模型(LLM)快速发展的背景下,研究者们越来越关注如何通过多代理系统来增强模型性能。传统的多代理方法虽然避免了大规模再训练的需求,但仍面临着计算效率和思维多样性的挑战。本文提出的稀疏代理混合(SparseMixture-of-Agents,SMoA)框架,通过借鉴稀疏专家混合(SparseMixtur......
  • HarmonyOS蓝牙串口协议(SPP)详解:实现设备间可靠数据交换
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在智能设备互联互通的世界里,蓝牙技术扮......
  • Vue自定义指令详解——以若依框架中封装指令为例分析
    自定义指令在Vue.js中,自定义指令提供了一种非常灵活的方式来扩展Vue的功能。以下是对Vue中自定义指令的详细解释:一、自定义指令的基本概念自定义指令允许开发者直接对DOM元素进行低层次操作,而无需编写大量的模板或者JavaScript代码。它们可以响应Vue的响应式系统,从而在数据......
  • 大语言模型(LLM)攻击技术研究项目申请
    1.课题拟解决的关键技术问题,拟采取的技术路线和主要创新点本课题的主要研究内容是LLM计算基础设施攻击技术研究、LLM模型自身安全研究和利用新prompt范式诱导LLM输出不良内容的攻击技术研究。这涉及到对驱动、AI平台、数据库、API接口等关键组件的深入剖析,探索LLM模型的安全边......