如何在不覆盖其他数据的情况下编辑文件中的数据
How can I edit data in file without the other data being overwritten?
我有一个文件,其中包含以下信息
123 abc 52 23
234 bcd 14 53
在我完成编辑后(ID位于最上面一行),它变成了这样的
12345 abc 52 23
bcd 14 53
执行此操作的代码是:
if (choiceSecond == 1)
{
cout << "Enter new ID: ";
cin >> ToyInformation[choiceFirst].ID;
outfile << ToyInformation[choiceFirst].ID << " "
<< ToyInformation[choiceFirst].Name << " "
<< ToyInformation[choiceFirst].Price << " "
<< ToyInformation[choiceFirst].Quantity << " " << endl;
}
结构:
struct toys
{
int ID;
char Name[31];
float Price;
int Quantity;
};
我确信我在这里做错了什么。有人能帮忙吗?
如果没有看到代码的其余部分,很难准确地说出发生了什么,但我猜你从一个包含以下内容的文件开始:
123 abc 52 23 n234 bcd 14 53 n
然后,我的猜测是,在读取文件后,您可以重新打开它,或者将文件指针倒带到开头,然后写"12345 abc 52 23\n"。这些新字符会覆盖文件第一部分中的现有字符,但保留其余字符,在文件中留下以下内容:
12345 abc 52 23 nbcd 14 53 n
您可能不想覆盖下一行的第一部分。所以你需要做的是读取整个文件(可能是一个向量或字符串列表),更新你想要在内存中的行,然后把它们全部写出来。或者,在读取文件时,更新所需的行,将它们分别写回另一个文件,并用旧输出交换新输出。
打开文件时使用ios_base::app
ofstream outfile("myfilename", ios_base::app);
这将导致所有输出都被附加到文件的末尾(我猜这正是您想要的)。
当您定义outfile
时,您可以使用模式ofstream::app
,就像一样
ofstream outfile (fileName, ofstream::app);
您想要在不更改其余数据的情况下更改文件中的某些数据。一般来说,这是不可能的。您可以只将某些字节替换为其他字节,但如果您的编辑涉及插入或删除字节,则必须覆盖文件的其余部分。
相关文章:
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 在不复制数据的情况下,将double数组转换为只有double成员的structs数组
- 有没有一种方法可以在不复制数据的情况下从string_view创建字符串流
- 串行读取()不会在没有数据接收的情况下返回值
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- 如何在没有缓冲的情况下使用 parquet-cpp 写入面向流/行的数据?
- 在不编写显式 setter 的情况下修改私有类数据成员的便捷方法是什么?模板有用吗?
- 在不减慢线程速度的情况下保存大量数据
- 如何对 int 变量应用验证,使其仅接受整数数据,并且在任何其他数据的情况下不会出错?
- 如何在没有性能命中的情况下抽象SIMD代码来处理不同的数据类型
- 是否可以在不分配内存或复制数据的情况下构造对象?
- 如何在不复制数据的情况下在平面数组和多维数组之间进行转换?
- 对象无法访问其私人数据.错误:在这种情况下私有
- 如何在不重写整个视频文件的情况下仅替换流中的一个数据框架?(ffmpeg)
- 给定一个填充无符号字符**的 C 函数,如何在没有中间副本的情况下用数据填充 std::vector
- 为什么在以下情况下没有数据竞争
- 在不复制数据的情况下更改 opencv mat 中的列顺序