2013-02-20 131 views
0

关于如何在不覆盖文件的情况下写入文件有许多问题。如何在不关闭文件的情况下覆盖文件

但是这一次我需要知道如何打开一个文件,然后写入一个由少量字符组成的值。该值非常短,但用更新后的值替换文件内容的过程可能会发生十亿次。

所以这里再次提出问题:有没有办法通过打开一次文件来写入这样的文件,而不是在覆盖内容之前关闭它多次?

也许如果我告诉你为什么我需要这个,它会帮助你给我一个更好的解决方案。 我需要一个仿真器的当前时间写入一个文件被读取并通过另一个模拟器(用于同步)

和psudo代码用于:

int main() { 

    int i = 0; 
std::ofstream myWriteFile; 
ostringstream out; 
myWriteFile.open("text.txt"); 

while (i < 4) {  
    out.str(""); 
    out << currentTime(); 
    myWriteFile << out.str() << std::endl; 
    i++; 
} 

myWriteFile.close(); 
return 0; 
} 

回答

1

位置的“放”指针该文件的写它使用std::ostream::seekp之前开始:

myWriteFile.seekp(0); 

的“放”指针指定要在文件中写的位置。写入内容时会自动递增,这就是为什么连续写入文件导致数据被追加到先前写入数据的末尾的原因。

+0

感谢您的回复。假设将XXXXX写入文件并使用seekp返回到文件的开头并写入YYY。输出将是YYYXX,而我需要它只是YYY。对?我可以在写之前删除内容,但有没有更好的方法?谢谢 – rahman 2013-02-20 02:11:53

+0

你不能截断打开的文件。如果你想要的话,你仍然要重新打开它。但是,您可以在其中写入终止字符,然后另一个模拟器只读取该字符。例如'\ n'可以工作,在这种情况下,您只会将第一行视为重要。 – 2013-02-20 02:28:30

+0

是的。我想这是一个好方法。谢谢(我有另一个问题,我会在另一篇文章中提到它) – rahman 2013-02-20 02:35:27

相关问题