文件存储数据

需求

设计一个小程序实现功能,将这个结构体的数据,保存在文件中
需求分析

如果是想将数据以文本格式保存在txt文件中,则使用fprintf()函数

如果是想将数据以二进制保存在bin文件中,则使用fwrite()函数

写入文本文件源码

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define length (1024)
typedef struct
{
    char id[length];
    char pwd[length];
    int age;
    int number;
} info;

void saveConfigToFile(const char *filename, const info *config)
{

    FILE *file = fopen(filename, "w");
    if (file == NULL)
    {
        perror("Error opening file");
        return;
    }
    if (fprintf(file, "id: %s\n", config->id) < 0 ||
        fprintf(file, "PWD: %s\n", config->pwd) < 0 ||
        fprintf(file, "age: %d\n", config->age) < 0 ||
        fprintf(file, "number: %d\n", config->number) < 0)
    {
        perror("Error writing to file");
    }

    fclose(file);
}

int main()
{
    info config = {
        .id = "ags",
        .pwd = "asg",
        .age = 0,
        .number = 0};

    saveConfigToFile("config.txt", &config);
    
    return 0;
}

写入二进制文件源码

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define length (1024)
typedef struct
{
    char id[length];
    char pwd[length];
    int age;
    int number;
} info;

void saveConfigToFile(const char *filename, const info *config)
{

    FILE *file = fopen(filename, "wb");
    if (file == NULL)
    {
        perror("Error opening file");
        return;
    }
    if (fwrite(config, sizeof(info), 1, file) != 1)
    {
        perror("Error writing to file");
    }

    fclose(file);
}

int main()
{
    info config = {
        .id = "ags",
        .pwd = "asg",
        .age = 0,
        .number = 0};

    saveConfigToFile("config.bin", &config);
    return 0;
}

打开文件

函数原型

c 复制代码
 FILE *fopen(const char *pathname, const char *mode);

函数参数

  • 1.char *pathname

    一个字符串,表示要打开的文件的路径。这个路径可以是相对路径或绝对路径。

  • 2const char *mode

    一个字符串,指定文件打开的模式。这个模式决定了文件是用于读取、写入、追加还是其他操作。常见的模式有:

c 复制代码
"r":以只读方式打开文件。文件必须存在。
"w":以只写方式打开文件。如果文件存在,则将其长度截断为 0(即删除文件内容),如果文件不存在则创建它。
"a":以追加方式打开文件,写操作会从文件末尾开始。如果文件不存在,则创建它。
"r+":以读/写方式打开文件。该文件必须存在。
"w+":创建一个空文件用于读写。
"a+":以读/写模式打开文件,写操作会从文件末尾开始。如果文件不存在,则创建它。
"b":在文件路径字符串中可以包含一个 "b" 字符,它将文件打开为二进制模式,这在读写二进制文件时是有用的。

函数返回值

fopen 函数返回一个 FILE 指针,该指针指向新打开的文件。

如果打开文件失败,函数将返回 NULL。

在使用完文件后,应该使用 fclose 函数关闭文件。

字符串比较

  • 1.函数原型
c 复制代码
int strcmp(const char *s1, const char *s2);
  • 2.函数参数

    *const char s1

    待比较的字符串1

    *const char s2

    待比较的字符串2

  • 3.函数返回值

    如果 s1 等于 s2,strcmp 返回 0。

    如果 s1 小于 s2(在字典顺序上),strcmp 返回一个负整数。

    如果 s1 大于 s2(在字典顺序上),strcmp 返回一个正整数。

写入数据fprintf

fprintf 函数是 C 语言标准库中的一个函数,用于将格式化的数据写入文件。它定义在 <stdio.h> 头文件中,其原型如下:

  • 1.函数原型
c 复制代码
int fprintf(FILE *stream, const char *format, ...);
  • 2.函数参数
    stream
    一个 FILE 类型的指针,指向 FILE 对象,这个对象标识了要写入数据的文件流。它可以是标准输出 stdout、标准错误 stderr 或者通过 fopen 打开的文件指针。

format

一个格式字符串,它指定了后续参数如何被格式化。格式字符串中可以包含格式化指定符,如 %d 用于整数,%s 用于字符串,%f 用于浮点数等。

  • 3.函数返回值
    fprintf 函数的返回值是成功写入的字符数。
    如果发生错误,它将返回一个负数。

写入数据fwrite

fwrite 函数是 C 语言标准库中的一个函数,用于将数据写入文件。它定义在 <stdio.h> 头文件中,其原型如下:

  • 1.函数原型
c 复制代码
size_t fwrite(const void *ptr, size_t size, size_t nmemb,
                     FILE *stream);
c 复制代码
fwrite(config, sizeof(stWFMUsrApCfgInfo), 1, file)

-2.函数参数

ptr

一个指向数据块的指针,这个数据块中的内容将被写入文件。

此处是一个结构体
size

每个数据项的大小,以字节为单位。
nmemb

要写入的数据项的数量。
stream

一个 FILE 类型的指针,指向 FILE 对象,这个对象标识了要写入数据的文件流。

函数返回值

fwrite 函数的返回值是成功写入的数据项数量。

如果这个数量小于 nmemb,可能是因为发生错误或者文件结束(EOF)。

相关推荐
夜雪一千36 分钟前
Linux 管道、重定向命令介绍
linux·运维·chrome
江华森40 分钟前
数据中心网络技术基础 —— 从原理到实操
linux·运维
骑着蜗牛撵大象3271 小时前
手写一个 HTTP 服务器:从 socket 到 epoll,Linux 上到底怎么把请求变成响应
linux·服务器·网络·http·epoll·socket编程·并发模型
程序员初一1 小时前
我在 1C1G 的服务器上装了个桌面环境,然后用 VNC 连它,然后我后悔了
linux·ssh
星恒随风2 小时前
Linux Socket TCP编程(二):逐文件重构多进程、多线程与线程池服务器,深入fork、pthread_create、popen和std::bind
linux·服务器·笔记·学习·tcp/ip
晚风叙码2 小时前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
无足鸟ICT2 小时前
【RHCA+】影响Linux系统性能的因素
linux·运维·服务器
沫璃染墨2 小时前
从零入门计算机网络系列(十):HTTP协议进阶——从资源路径解析到状态码与请求头详解
linux·运维·服务器·网络·c++·http
小则又沐风a2 小时前
深入了解五种IO模型与非阻塞IO
linux
Sayai2 小时前
Ubuntu 开发环境搭建避坑(一):网卡 EEE 致 60% 周期性丢包,Realtek RTL8125 网络黑洞排查与修复
linux·运维·网络·ubuntu·性能优化