C++——二进制读取文件,存入字符串缓冲区、写如文件到txt

9 篇文章 0 订阅

读取文件

#include <fstream>
int main()
{
    std::string path = "./a.txt";
    std::filesystem::path file_0(path);
    if (!std::filesystem::exists(file_0))
    {
        cout << read_path << "不存在" << endl;
        return 1;
    }
    
    std::ifstream ifs;

    // 打开文件:
    ifs.open(path, std::ios::out | std::ios::binary);
    if (!ifs.is_open()) //判断文件是否打开成功
    {
        std::cout << "文件打开失败" << std::endl;
    }

    // 获取文件长度
    //用于将文件指针移动到文件的末尾。这个操作通常用于获取文件的大小。
    ifs.seekg(0, std::ios::end); 
    std::size_t length = ifs.tellg();
    ifs.seekg(0, std::ios::beg);

    std::cout << "length: " << length << std::endl;

    // 创建字符串缓冲区
    unsigned char* file_data = (unsigned char*)malloc(sizeof(unsigned char) * length);

    // 读取二进制数据到字符串缓冲区
    ifs.read(reinterpret_cast<char*>(file_data), length);

    // 5. 关闭文件
    ifs.close();

    free(file_data);

    return 0;
}

结果:length: 51

在这里插入图片描述

写入文件

struct data
{
	int id;  // idֵ
	std::string one; // 
	float two;

};
//测试写1亿条数据需要多长时间
#include <boost\timer.hpp>
#include <fstream>
int main()
{
	std::ofstream ofs;
	ofs.open("./text2.txt", ios::out);
	
	boost::timer one1; // 定义后计时开始
	one1.restart();  // 从新从这里开始计时
	struct data temp;
	temp.one = "2023-06-07 00:00:00";


	for (int i = 0; i < 100000000; i++)
	{
		temp.id = i;
		temp.two = 5.5;
		ofs << temp.id <<" " << temp.one << " " << temp.two << std::endl;
	}

	std::cout << "用时:" << one1.elapsed() << "秒 , " << one1.elapsed() / 60 << " 分钟 " << std::endl;

	ofs.close();
	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值