摘要:
频繁写多个文件时,文件长度不等问题。已解决。
C++ 频繁写数据到多个文件时,要避免频繁的打开关闭文件,减少内存占用。
void func1()
{
...
writeDataTofile(file1,data1);
...
}
void func2()
{
...
writeDataTofile(file2,data2);
...
}
void func3()
{
...
writeDataTofile(file3,data3);
...
}
int main()
{
for (int i = 0; i < 1000; i++)
{
func1();
func2();
func3();
.....
}
return 0;
}
由于每次循环只写一个数据,要写1000次,所以要避免每次读写文件都要打开关闭文件,可以用文件流作为函数参数,保持文件流一直开着,写完之后在关闭流数据。
void WriteVectorToFile(std::ofstream &vecStream, Eigen::VectorXd vec)
{
for (int i = 0; i < vec.rows(); ++i)
vecStream << std::fixed << std::setprecision(3) << std::setw(8) << vec[i] << ",";
vecStream << std::endl;
vecStream.flush();
}
在以文件流(队列结构)为函数参数时,一定要加引用。而且对于流数据来说无论是读还是写,都会改变流数据的内容。读流时,读一次数据减少一个,写时,写一个流数据增加一个。因此以流为参数时一定要加引用。
问题描述:
最终程序运行的结束后,file1,file2和file3的长度不一样。file1 有1000行数据,file2有1000行数据,但是file3只有900+行数据。
解决方法:
int func1()
{
...
return data1;
}
int func2()
{
...
return data2;
}
int func3()
{
...
return data3;
}
int main()
{
for (int i = 0; i < 1000; i++)
{
data1 = func1();
data2 = func2();
data3 = func3();
writeDataTofile(file1,data1);
writeDataTofile(file2,data2);
writeDataTofile(file3,data3);
}
return 0;
}
将写文件操作集中在一起,在函数中没有写操作,只是提取数据,然后再统一写数据。而且将写文件操作写再一起也方便对代码的管理,分散写容易出现程序一直再写文件,但是不知道再哪写的。
现在还没找到为会出现这个问题,这样解决的原理是啥?????