说明:我有一个文本文件,里面有几行,我想写两行之间。
我尝试了什么:我有一个循环来确定我想要写的位置。当我尝试打开文件时,使用seekp来定位输入,然后写入文件被截断。
示例
file.txt的:
Hello
Write under this line
Write above this line
代码:
ofstream myfileo;
myfileo.open("file.txt");
cout<<myfileo.tellp()<<endl;//starts at 0
myfileo.seekp(26);//move to 26 ...End of second line
cout<<myfileo.tellp()<<endl;//says 26
string institution ="hello";
myfileo<<"\n"<<institution<<"\n";
myfileo.close();
问题:我不确定文件被截断的原因。我尝试使用追加,但无论它写到底部是什么原因,但是我不确定我做错了什么。
谢谢, JT
答案 0 :(得分:0)
尝试做我在评论中发布的内容是可能的,但令人沮丧。 以下代码适用于此特定示例,但并不适用于所有情况:
#include <algorithm>
#include <fstream>
#include <iterator>
#include <string>
#include <vector>
int main (void)
{
std::fstream file ;
file.open ("test.txt") ;
file.seekg (28, file.beg) ; // 28 was the correct offset on my system.
auto begin = std::istream_iterator <std::string> (file) ;
auto end = std::istream_iterator <std::string> () ;
std::vector <std::string> buffer (begin, end) ;
file.clear () ; // fail-bit is sometimes set for some reaon.
file.seekg (28, file.beg) ;
file << "\n" "hello" "\n" ;
std::copy (std::begin (buffer), std::end (buffer),
std::ostream_iterator <std::string> (file, " ")) ;
return 0 ;
}
如果您不想将所有内容加载到内存中,更好的解决方案是使用临时文件。我们称之为 temp.txt 。然后你会:
步骤4和5是特定于操作系统的(除非你有一些可以执行此操作的可移植库)。