在 c++ 中替换文件中特定位置的元素
Replacing element from a specific position at a file in c++
我面临着逻辑构建问题。
假设我在 txt 文件中有以下数据:
大卫天使 20-04-2019 比拉尔学习如何阅读 20-04-2019 莎拉 不给<咒骂删除>的字幕艺术咒骂删除>
20-04-2019现在我想将第二行的日期从 20-04-2019 更改为 25-04-2019
我该怎么做?
为了将文件中位置S
(包括)到E
(不包括)的字节替换为长度L
的字节数组,需要考虑 3 种可能的情况:
-
E - S == L
:简单的情况,文件大小不会改变。 寻求S
并写入L
字节。// overwriting 4 bytes with 4 bytes oooS---Eooo oooLLLLEooo
-
E - S < L
:写入文件越多,大小增加。 作为第一步,"移动"从E
开始的每个字节,L - (E - S)
"进一步向后移动"。 这为将L
字节写入S
腾出了空间,而不会覆盖位于E
处的字节(以及以下字节)。 完成此"移动"后,寻求S
并写入L
字节。// replacing 4 bytes with 6 bytes oooS---Eooo oooS---??Eooo oooLLLLLLEooo
-
E - S > L
:写入文件较少,大小减小。第一步,"移动"从E
开始的每个字节,(E - S) - L
文件"进一步移动到前面"。 这将S
和字节的新位置之间的空间(E
)减少为正好L
字节长。 现在更棘手的部分:截断文件(记住,大小减小了! C++17 文件系统 TS 对此进行了resize_file
,否则使用 a) 一些库(boost?) b) 平台相关的调用(在 POSIX 系统上truncate
)。最后,将L
字节写入S
。// replacing 4 bytes with 2 bytes oooS---Eooo oooS-Eooo?? oooS-Eooo oooLLEooo
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 是与初始类同一内存位置的重新定位类
- 如何在使用网格布局时重叠qwidgets,并将重叠的widget定位在距离窗口边界特定距离的位置
- 我不知道如何定位最高随机数的位置
- 如何在MFC上设置窗口位置以将其定位到屏幕顶部
- 将QGraphicsSvgItem的中心定位在一个位置上。
- 如何定位WinRT异步方法调用中出现错误的位置
- 重定位表项在平面二进制文件中的存储位置