文件存储数据

需求

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

如果是想将数据以文本格式保存在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)。

相关推荐
小橞10 分钟前
Linux搭建简易路由转发
linux·运维·服务器
robot_大菜鸟12 分钟前
linux-L7-linux 查看json文件
linux·运维
Flying_Fish_roe16 分钟前
linux-网络管理-网络抓包
linux·网络·php
小技与小术2 小时前
lvs-nat模式实验详解
linux·运维·服务器·网络·lvs
py.鸽鸽3 小时前
Linux2-mkdir,touch,cat,more
linux
aabbcc456aa3 小时前
ubuntu安装mysql 8.0忘记root初始密码,如何重新修改密码
linux·mysql·ubuntu
张太行_3 小时前
Linux 调用write()函数后,内核一般多久将数据写入磁盘
linux·运维
Flying_Fish_roe3 小时前
linux-网络管理-防火墙配置
linux·运维·服务器
杰瑞的猫^_^3 小时前
【Linux】线程&锁&条件变量&信号量&生产消费者模型&线程池
linux·线程池·条件变量·互斥锁·信号量·生产消费者模型
只对您心动3 小时前
【QT】实现TCP服务器,客户端之间的通信
linux·服务器·c语言·开发语言·c++·qt·tcp/ip