【问题标题】:How to append to file using seekg and seekp in c++, without using ios::app flag如何在 C++ 中使用 seekg 和 seekp 附加到文件,而不使用 ios::app 标志
【发布时间】:2016-04-05 06:04:57
【问题描述】:

我在使用 seekp 和 seekg 函数时没有得到正确的输出,而另一方面,当我使用 ios::app 进行追加时,程序运行良好。我应该如何使用 seekg() 和 seekp() 函数来追加文件?

#include<iostream.h>
#include<conio.h>
#include<fstream.h>
void main()
{            clrscr();

ofstream out;
out.open("MJ");
char data[100];
cout<<"\nEnter data: ";
cin.getline(data,100);
out<<data;
out.close();
ifstream in;
in.open("MJ");

in>>data;
cout<<data;

in.close();


out.open("MJ");

cout<<"\nEnter data: ";
cin.getline(data,100);
out.seekp(2);
out<<data;

out.close();

in.open("MJ");
in>>data;
cout<<data<<endl;


     getch();

}

【问题讨论】:

  • 您可以使用std::ios::ate 代替std::ios::app 打开文件,文件指针已经位于文件末尾(但不是在追加模式下)。也许向我们展示你做了什么,我们可以看到你哪里出错了?
  • 您知道seekpseekg 会影响不同的文件指针吗?
  • 您可以尝试创建一个Minimal, Complete, and Verifiable Example 并告诉我们吗?
  • 编辑了问题:这就是我希望程序工作的方式,它需要第一个文本说“ava”,然后它需要文本作为“cardo”输出应该是“avacardo”
  • @Galik 我只想使用文件指针 seekg 和 seekp。

标签: c++ iostream seekg


【解决方案1】:

当您执行out.seekp(2) 时,您只需在文件中查找两个字节,然后覆盖除此之外的任何内容,但这不是问题。

问题是当您重新打开文件时,旧内容被破坏,文件被截断。如果要手动寻尾,需要在open | in模式下打开文件不破坏内容:

out.open("MJ", ios::out | ios::in);

ios::in模式下打开一个“输出”流是可以的。

参见例如this reference 有一个很好的模式表以及它们的作用和含义。

【讨论】:

  • 非常感谢先生!但我认为 0- 表示乞求 1 - 表示当前和 - 结束。
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 2013-03-18
  • 2011-06-10
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 2012-12-29
相关资源
最近更新 更多