- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
描述:我有一个包含几行的文本文件,我想在两行之间写入。
我尝试了什么: 我有一个循环来确定我想写的位置。当我尝试打开文件时,使用 seekp 定位输入,然后写入文件被截断。
示例
文件.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();
问题:我不确定文件被截断的原因。我尝试使用 append,但无论它向底部写入什么,从那以后,我都不确定我做错了什么。
谢谢,JT
最佳答案
尝试执行我在评论中发布的内容是可能的,但令人沮丧。以下是适用于此特定示例的代码,但并非在所有情况下都适用:
#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 步是特定于操作系统的(除非您有一些可以执行此操作的可移植库)。
关于c++ - open/seekp/write 正在截断文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230363/
在这个程序中我想改变文件中的一些值。现在我以附加模式打开文件并将我的 seekp 指针移动到我给定的位置。但问题是它在文件末尾写入数据而不是那里有 seekp 指针。 #include #includ
我在以二进制模式替换文件的一部分时遇到了一些问题。出于某种原因,我的 seekp() 行没有将文件指针放在所需位置。现在它将新内容附加到文件末尾,而不是替换所需的部分。 long int pos; b
执行以下代码后文件的内容应该是什么 int main (int, char**) { std::string s1 {"Hello world"}; std::string s2 {"
如果我在文件末尾执行 seekp 然后 write 会发生什么?我希望发生的是该文件会自动扩展到 seekp 位置的大小。如果是这样,它是否也通过向磁盘写入任何内容来填充文件的旧末尾和新位置之间的空间
以下代码适用于双向流并从文件中查找记录 ID,然后从文件中替换该记录的内容。但是在覆盖内容之前,它会将 put 指针移动到 get 指针的位置。通过tellp()和tellg()发现它们在移位前都已经
我正在尝试使用 C++ 在文件的特定位置写入条目 基本上我有 ofstream ofs("file.dat", ios::binary | ios::app); ofs.seekp(220, ios:
编辑,抱歉,这个问题显然与 failbit not being set when seekg seeks past end of file (C++,Linux) 重复 要到达我所在的位置,首先在终端
每当我想将位置设置为 X tellp return -1 时,fstream 中的 seekp() 有一个小问题。 代码: fstream file("Riot.exe", ios::in | ios
这个程序应该创建一个名为 Record.bin 的二进制文件,然后将用户输入的所有信息写入该文件。现在它到达了它在 Student B[10] 中读取的部分,并且它正确读取了 B[0],但是 B[]
我用 C++ 编写了以下代码,将 Student 对象写入文件,然后使用 seekp() 将输出指针移动到特定位置,在该位置我编写了一个 Student 对象,该对象替换了该位置的先前对象,并保留了其
我有以下代码: #include #include #include using namespace std; int main() { fstream in("test.txt");
我正在尝试写入以将数据追加到文件末尾,并且正在使用 seekp(streamoff off, ios_base::seekdir dir) 函数但它不追加,不知何故它在中间写入数据的文件。我尝试像这样
描述:我有一个包含几行的文本文件,我想在两行之间写入。 我尝试了什么: 我有一个循环来确定我想写的位置。当我尝试打开文件时,使用 seekp 定位输入,然后写入文件被截断。 示例 文件.txt: He
我刚刚注意到,通过“seekp”在 microsoft visual studio 中更改位置,我在处理文件时也隐含地更改了读取位置。 我想知道这是否是“可移植”行为?我可以期望阅读和写作的位置始终相
为我糟糕的英语道歉。我被 C++ 中的 fstream 困住了。这是我的代码。 #include #include using namespace std; struct TestStruct {
我创建了一个类 Student。 学生类: class Student { friend ostream& operator(&s), sizeof(s)); return s
我在 Debian x64 PC 上运行的 c++ 程序有一个奇怪的行为。 我无法设法先读取文件,然后写入另一个值,然后再读取这些值。我已经阅读了很多信息,包括关于 stackoverflow 的问题
我正在编写一个方法来替换二进制文件中的指定字符串,它在我用 seekp 设置的位置之前写入 NULL,然后写入字符串并关闭流。我只想替换文件中的一些字节。在这段代码之前,我尝试使用带有 ios::bi
一位面试官问我如何实现 tail(是的,linux shell 中的那个)。我的回答是,先寻找到文件的末尾,然后一个接一个地向前读取字符,如果遇到 \n,则表示一行已关闭,等等。我认为我的答案是正确的
我正在寻找一些关于 seekg() 和 seekp() 在写入文件时如何工作的说明。比如说我有一个像这样的文件: offset 0: 2 offset 4: 4 offset 8: 6 offset
我是一名优秀的程序员,十分优秀!