【C++】以追加方式将数据写入 与当前系统时间戳相关联的日志文件中

发布时间:2023年12月22日

案例:

生成一个带有时间戳的日志文件,文件名为"maData",保存在"./log/"目录下。日志文件包含两列:整数值(变量a)和相应的双精度值(变量b)。程序在一个循环中运行,向文件写入100行数据。

1.时间和日期处理:

  • 使用 和 头文件处理时间和日期。
  • 获取当前时间戳(秒级),并使用 localtime 函数将其转换为本地时间结构体。
  • 使用 strftime 函数将时间结构体格式化为字符串,格式为"%Y%m%d_%H%M%S"。
  • 构建新的文件名,形如"./log/maDataYYYYMMDD_HHMMSS.txt"。

2.文件名字符串处理:

  • 使用 ostringstream 将文件名字符串添加到输出流中。
  • 将输出流中的字符串存储到 filename 变量中。

3.文件操作:

  • 打开文件,采用追加方式打开,即如果文件存在则在文件末尾追加内容,如果文件不存在则创建文件。
  • 在循环中,将整数 a 和浮点数 b 写入文件,每行以制表符分隔。
  • 刷新文件缓冲区以确保数据被立即写入文件。
  • 关闭文件。

代码实现如下:

#include <iostream>
#include <sstream>
#include <fstream>
#include <ctime>
#include <iomanip>

int main()
{

    int a = 0;
    double b = 0;
    int i = 0;

    // 获取当前日期和时间
    std::time_t now = std::time(nullptr);
    struct std::tm *current_time = std::localtime(&now);
    // 构建日期时间字符串
    char buffer[80];
    std::strftime(buffer, sizeof(buffer), "%Y%m%d_%H%M%S", current_time);
    // 构建新的文件名
    std::string new_filename = "./log/maData" + std::string(buffer) + ".txt";

    std::ostringstream oss;
    oss << new_filename;
    std::string filename = oss.str();

    // 打开文件
    // 以追加方式打开文件
    std::ofstream writeFile(filename, std::ios::app);

    while (i < 100)
    {
    	// 你的数据
        a = i;
        b = i * 0.2;

        // 将a和b写入文件,以制表符分隔,每行末尾加换行符
        writeFile << a << "\t";
        writeFile << std::fixed << std::setprecision(4) << b << std::defaultfloat << "\t";
        writeFile << "\n";
        
        // 刷新文件缓冲区,确保数据立即写入文件
        writeFile.flush();

        i++;
    }

    // 关闭文件
    writeFile.close();

    return 0;
}

文章来源:https://blog.csdn.net/qq_54199287/article/details/135137176
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。