我需要用c ++编写一个文件。内容是来自while循环的标记,所以现在我逐行编写它。 现在我想我可以改善写入时间,保存变量中的所有内容然后写入文件。 有人知道这两种方法中的哪一种更好?
每一行都由此函数写入:
void writeFile(char* filename, string value){
ofstream outFile(filename, ios::app);
outFile << value;
outFile.close();
}
while(/* Something */){
/* something */
writeFile(..);
}
另一种方式是:
void writeNewFile(char* filename, string value){
ofstream outFile(filename);
outFile<<value;
outFile.close();
}
string res = "";
while(/* Something */){
/* something */
res += mydata;
}
writeNewFile(filename, res);
答案 0 :(得分:7)
你考虑过了吗;
ofstream outFile(filename);
while(/* Something */){
/*...*/
outFile<< mydata;
}
outFile.close();
outfile(streams)是缓冲的,这意味着它会在将数据写入磁盘之前将数据累积在内部缓冲区(如字符串)中 - 除非你有非常特殊的要求,否则你不可能超越它
答案 1 :(得分:2)
在第一种情况下,您在每次循环迭代关闭文件流并打开新流时,最好做以下事情:
void writeFile(const std::string& value, std::ostream* os = nullptr) {
if (os != nullptr) {
os << value;
}
}
或者:
void writeFile(const std::string& value, std::ostream& os) {
os << value;
}
然后用你在另一个函数/ main /中创建的fstream
对象(或第一种情况下的地址)调用它。
至于它是连续写还是最后写的更快,它实际上取决于你在while
循环中执行的计算类型以及它的含量。放慢整个过程。但是,出于可靠性原因,如果程序在while
循环执行期间因任何原因崩溃,有时最好连续写入以避免丢失所有数据。
答案 2 :(得分:0)
fstream对象已经被缓冲,因此添加到字符串对你没什么帮助,实际上,当超过先前分配的大小时,由于字符串内容的重新分配,甚至可能会失去性能。人们必须要测试才能知道。