如何搜索和替换文件中的字符串 C

How to search and replace a string in a file C

我必须以这种方式修改文件中的字符串:

Name: Name1
Surname: Surname1
ID: 00000000
Age: 30


Name: Name2
Surname: Surname2
ID: 00000001
Age: 32

...

我想这样做:我问输入ID,我问他想改变什么(如果是名字,姓氏,身份证或年龄)然后我问他想改变什么.然后我在文件中搜索 ID,如果他想更改姓氏,我将 FSEEK 移动到 -1,对于名字,我将 FSEEK 移动到 -2,如果他想更改年龄,我将 FSEEK 移动到 +1。

那么,有没有更简单或更快捷的方法来做到这一点?

谢谢:)

您不能在文件插入或删除某些字节序列。您只能 覆盖 现有字节,或在文件末尾附加新字节(这是 <stdio.h> 文件标准化的方式,以及 POSIX 或 Windows 文件的行为,以及几乎每个 file system - 我今天不知道有什么例外 - 是如何工作的)

所以你可以从旧文件生成一个新文件(然后可能 rename 新的和旧的一样)。

您也可以读取内存中的所有文件并从内存中输出全部新内容。

您可能应该考虑更高级的抽象:索引文件 à la GDBM or simple databases à la Sqlite (or real databases like PostgreSQL, MongoDb,等等...)

请注意,当前的处理器比磁盘快得多(hard spinning disks - with access times in dozen of milliseconds - , and probably thousand times for SSD 快了一百万倍 - 访问时间约为一百微秒)。因此,花一些 CPU 时间将 "organize" 数据写入 "files" 或 "network".

如果使用笔记本电脑或台式机,它现在有很多 RAM(几千兆字节),因此很可能您的所有数据都适合内存。 RAM 带宽也远高于磁盘、SSD 或网络带宽(并且 RAM 延迟也低得多)。 如果您管理大量数据(超过 1 GB),使用数据库系统是明智的(特别是,因为您可能不会一次写入所有数据)。

您可能对 serialization, application checkpointing, JSON ....

感兴趣

这意味着您必须同时打开文件进行读取和写入,在您的情况下,这会带来一些不值得的复杂情况。

我宁愿做以下事情:

  • 打开文件进行阅读
  • 读取整条记录
  • 检查是否是该改的,万一改
  • 将记录写入第二个文件
  • 完成记录后,您可以重命名新文件以覆盖初始文件或保持原样。