代码示例:
#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()函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小。