我有一个将数据输出到文本文件的函数:
void File_IO::save( const std::string& path_ ) const
{
const std::string file_name = path_ + this->local_time() + ".txt";
std::ofstream outfile( file_name );
std::vector<std::string> vec = { "One", "Two", "Three", "Four" };
outfile << '\n' << '\n' << "//--------------------------------- DATA:" << '\n' << '\n';
long pos_beg = outfile.tellp();
for( auto& i : vec )
{
outfile << i << '\n';
}
long pos_end = outfile.tellp();
outfile << '\n' << "//---------------------------------------" << '\n' << '\n';
//outfile.seekp( 0 );
//outfile << pos_beg << " " << pos_end << " " << pos_beg << " " << pos_end;
}
输出:
//--------------------------------- DATA:
One
Two
Three
Four
//---------------------------------------
当涉及用数据的开始/结束位置覆盖第一行时,问题出现在函数的末尾...添加以下两行:
outfile.seekp( 0 );
outfile << pos_beg << " " << pos_end << " " << pos_beg << " " << pos_end;
输出:
49 72 49 72---------------------------- DATA:
One
Two
Three
Four
//---------------------------------------
正如你所看到的,在我们到达标题之前文件中有两个空行,而是覆盖它们并部分删除标题行,该标题行是文件中的第3行而不是预期的第1行。
另一条线索:
如果我只写一个var,它似乎工作但仍然删除文件开头的一个空行:
outfile.seekp( 0 );
outfile << pos_beg ;
输出:
49
//--------------------------------- DATA:
One
Two
Three
Four
//---------------------------------------
有人可以解释这里发生了什么,以及如何根据需要编辑我的功能?
PS 不允许我出于某种原因添加相关标签
答案 0 :(得分:0)
在伊戈尔向右移动的方向后面,向函数添加以下代码行似乎有效:
outfile << " " << '\n';
修订功能:
void File_IO::save( const std::string& path_ ) const
{
const std::string file_name = path_ + this->local_time() + ".txt";
std::ofstream outfile( file_name );
std::vector<std::string> vec = { "One", "Two", "Three", "Four" };
// Edit
outfile << " " << '\n';
// Edit
outfile << '\n' << '\n' << "//--------------------------------- DATA:" << '\n' << '\n';
long pos_beg = outfile.tellp();
for( auto& i : vec )
{
outfile << i << '\n';
}
long pos_end = outfile.tellp();
outfile << '\n' << "//---------------------------------------" << '\n' << '\n';
outfile.seekp( 0 );
outfile << pos_beg << " " << pos_end << " " << pos_beg << " " << pos_end;
}
输出:
104 127 104 127
//--------------------------------- DATA:
One
Two
Three
Four
//---------------------------------------
如果有人可以提供更好的答案并说出原因,那么我会接受一个看起来有点躲闪的人。