我必须以这种方式修改结构文件中的字符串:
Name: Name1
Surname: Surname1
ID: 00000000
Age: 30
Name: Name2
Surname: Surname2
ID: 00000001
Age: 32
...
我想以这种方式做:我在输入ID时询问,我问他想要改变什么(如果是名字,姓氏,身份证或年龄)然后我问他想要改变它。然后我搜索文件中的ID,如果他想更改姓氏,我将FSEEK移动到-1,对于名称,我将FSEEK移动到-2,或者如果他想改变年龄,我将FSEEK移动到+1。
那么,有更容易的更快速的方法吗?
谢谢:)
答案 0 :(得分:2)
您无法在文件内插入或删除某些字节序列。您只能覆盖现有字节,或在文件末尾添加新字节(这是<stdio.h>
文件的标准化方式,以及POSIX或Windows文件的行为方式,以及几乎每个{{1} 3}} - 我今天不知道任何例外 - 工作)
所以你可以从旧文件中生成一个新文件(然后可能rename
新文件作为旧文件。
您还可以读取内存中的所有文件,并从内存中输出全部新内容。
您可能应该考虑更高级别的抽象:索引文件àlafile system或简单数据库àlaGDBM(或真实数据库,如Sqlite,PostgreSQL等。 ..)
请注意,当前处理器比磁盘快得多(MongoDb近一百万次 - 访问时间为十几毫秒 - 而hard spinning disks可能是千倍 - 访问时间约为百微秒)。因此,花费一些CPU时间来“组织”写入“文件”或“网络”的数据是非常有意义的(并且比上个世纪更多)。
如果使用笔记本电脑或台式机,它今天有很多RAM(几千兆字节),因此很可能所有数据都适合内存。 RAM带宽也远高于磁盘,SSD或网络带宽(并且RAM延迟也低得多)。 如果使用数据库系统管理大量数据(超过千兆字节)是明智的(特别是因为您可能不会立即编写所有数据)。
您可能对SSD,serialization,application checkpointing ....
感兴趣答案 1 :(得分:1)
这意味着您必须同时打开文件进行读写,这有一些不值得的复杂情况。
我宁愿做以下事情: