C++读写文件

代码示例:

#include <iostream>
#include <vector>
#include <fstream>

//按行写文本文件
void WriteFile() 
{
    std::vector<std::string> output_blocks = {
        {"aaaaa"},
        {"bbbbb"},
    };
    std::fstream out_file("test.txt", std::ios::out);
    for (int i = 0; i < output_blocks.size(); i++)
    {
        std::string &line = output_blocks[i];
        out_file << line << std::endl;
    }
    out_file.close();
}

//按行读文本文件
void ReadFileLine()
{
    std::fstream file_stream("test.txt", std::ios::in);
    std::string line;
    if (file_stream.is_open())
    {
        while (std::getline(file_stream, line)) {
            std::cout << line << std::endl;
        }
    }
    file_stream.close();
    return 0;
}


//写二进制文件
void WriteBinFile()
{
    std::vector<int> data(100, 8);
    std::fstream out_file("data.bin", std::ios::out | std::ios::binary);
    if (out_file.is_open())
    {
        out_file.write((const char*)data.data(), data.size()*sizeof(int));
    }
	out_file.close();
}

//读取二进制文件
void ReadBinFile()
{
    std::fstream in_file("data.bin", std::ios::in | std::ios::binary);
    in_file.seekg(0,std::ios::end);
    size_t fileSize = in_file.tellg();
    in_file.seekg(0,std::ios::beg);

    std::vector<int> buffer;
    buffer.resize(fileSize / sizeof(int));
    if (in_file.is_open())
    {
        in_file.read((char*)buffer.data(), fileSize);
    }
	for(int i = 0; i < buffer.size(); i++)
		std::cout << buffer[i] <<endl;
	in_file.close();
}

fstream第二个参数表明文件打开方式: 

ios::in    = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式)
ios::out    = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)
ios::ate    = 0x04, //文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用
ios::app    = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后
ios::trunc   = 0x10, //在读写前先将文件长度截断为0(默认)
ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用
ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用
ios::binary  = 0x80  //二进制格式文件

获取文件大小可以对输入流使用seekg()与tellg()两个函数获取:

seekg()是对输入文件定位,有两个参数:第一个参数是偏移量,第二个参数是基地址。
第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是:
ios::beg:表示输入流的开始位置
ios::cur:表示输入流的当前位置
ios::end:表示输入流的结束位置
tellg()函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小。

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值