通过read函数将文件中的数据按照一定的长度读取出来并且存放在新的数组中。
函数原型istream& read (char* s, streamsize n); //用来暂存内容的数组(必须是char*型),以及流的长度
比如我们要读取txt文件中的内容
ifstream in("TEST.txt");
先通过文件流将流与txt文件绑定,然后获取文件长度
in.seekg(0, in.end); //追溯到流的尾部
int length = in.tellg(); //获取流的长度
in.seekg(0, in.beg); //回到流的头部
然后读取文件
char* temp = new char[length]; //用来暂存内容的数组
if (in.is_open()) {
cout << "Now reading..." << endl;
in.read(temp, length); //read函数
}
将流中的内容读取到容器中
template
std::vector ReadArray(std::ifstream &in, int size) //size标识vector的大小
{
std::vector v(size, 0);
in.read((char*)(&v[0]), sizeof(T)*size);
return v;
}
这里注意,读取时必须标识读入的位置,一般从第一个位置开始读入,即vec[0] 或者string[0]
in.seekg(0, in.beg); //回溯到流头部
vector textVec;
textVec = ReadArray(in, length); //读取成功
in.close(); //不要忘了关闭流
程序整体如下
#include
#include
#include
using namespace std;
template
std::vector ReadArray(std::ifstream &in, int size) //size标识vector的大小
{
std::vector v(size, 0);
in.read((char*)(&v[0]), sizeof(T)*size);
return v;
}
int main() {
ifstream in("TEST.txt");
//获取文件的大小
in.seekg(0, in.end);
int length = in.tellg();
in.seekg(0, in.beg);
char* temp = new char[length];
if (in.is_open()) {
cout << "Now reading..." << endl;
in.read(temp, length);
}
for (int i = 0; i < length; ++i)
{
cout << temp[i] <<" ";
}
cout << endl;
in.seekg(0, in.beg);
vector textVec;
textVec = ReadArray(in, length);
cout << textVec[1] << endl;
in.close();
system("PAUSE");
}