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

如何在文件C中搜索和替换字符串,c,string,file,fseek,file-pointer,C,String,File,Fseek,File Pointer,我必须以这种方式修改文件结构中的字符串: Name: Name1 Surname: Surname1 ID: 00000000 Age: 30 Name: Name2 Surname: Surname2 ID: 00000001 Age: 32 ... 我想这样做:我要求输入ID,我询问他想要更改什么(如果是姓名、姓氏、ID或年龄),然后我询问他想要更改什么。然后我在文件中搜索ID,如果他想更改姓氏,我会将FSEEK移动到-1,如果他想更改年龄,我会将FSEEK移动到-2,或者将FSEE

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

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


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

...
我想这样做:我要求输入ID,我询问他想要更改什么(如果是姓名、姓氏、ID或年龄),然后我询问他想要更改什么。然后我在文件中搜索ID,如果他想更改姓氏,我会将FSEEK移动到-1,如果他想更改年龄,我会将FSEEK移动到-2,或者将FSEEK移动到+1

那么,有没有更简单、更快捷的方法


谢谢:)

您不能在文件中插入或删除某些字节序列。您只能覆盖现有字节,或在文件末尾追加新字节(这就是
文件的标准化方式,POSIX或Windows文件的行为方式,以及几乎所有(我不知道今天有任何例外)的工作方式)

因此,您可以从旧文件生成一个新文件(然后可能将新文件重命名为旧文件)

您还可以读取内存中的所有文件,并从内存中输出整个新内容

你可能应该考虑更高层次的抽象:索引文件LALA或简单数据库(LA或真实数据库等)

请注意,当前的处理器比磁盘快得多(访问时间大约是磁盘的100万倍,访问时间在十几毫秒内,可能是磁盘的1000倍,访问时间大约为100微秒)。因此,花一些CPU时间来“组织”写入“文件”或“网络”的数据是很有意义的(比上个世纪要多得多)

如果使用笔记本电脑或台式机,它现在有很多RAM(几GB),因此很可能所有数据都可以存储在内存中。RAM带宽也比磁盘、SSD或网络带宽高得多(RAM延迟也低得多)。 如果您使用数据库系统管理大量数据(超过1GB),这是明智的(尤其是,因为您可能不会一次写入所有数据)


您可能对…感兴趣。

您不能在文件中插入或删除某些字节序列。您只能覆盖现有字节,或在文件末尾追加新字节(这就是
文件的标准化方式,POSIX或Windows文件的行为方式,以及几乎所有(我不知道今天有任何例外)的工作方式)

因此,您可以从旧文件生成一个新文件(然后可能将新文件重命名为旧文件)

您还可以读取内存中的所有文件,并从内存中输出整个新内容

你可能应该考虑更高层次的抽象:索引文件LALA或简单数据库(LA或真实数据库等)

请注意,当前的处理器比磁盘快得多(访问时间大约是磁盘的100万倍,访问时间在十几毫秒内,可能是磁盘的1000倍,访问时间大约为100微秒)。因此,花一些CPU时间来“组织”写入“文件”或“网络”的数据是很有意义的(比上个世纪要多得多)

如果使用笔记本电脑或台式机,它现在有很多RAM(几GB),因此很可能所有数据都可以存储在内存中。RAM带宽也比磁盘、SSD或网络带宽高得多(RAM延迟也低得多)。 如果您使用数据库系统管理大量数据(超过1GB),这是明智的(尤其是,因为您可能不会一次写入所有数据)


您可能对…感兴趣。

您不能在文件中插入或删除某些字节序列。您只能覆盖现有字节,或在文件末尾追加新字节(这就是
文件的标准化方式,POSIX或Windows文件的行为方式,以及几乎所有(我不知道今天有任何例外)的工作方式)

因此,您可以从旧文件生成一个新文件(然后可能将新文件重命名为旧文件)

您还可以读取内存中的所有文件,并从内存中输出整个新内容

你可能应该考虑更高层次的抽象:索引文件LALA或简单数据库(LA或真实数据库等)

请注意,当前的处理器比磁盘快得多(访问时间大约是磁盘的100万倍,访问时间在十几毫秒内,可能是磁盘的1000倍,访问时间大约为100微秒)。因此,花一些CPU时间来“组织”写入“文件”或“网络”的数据是很有意义的(比上个世纪要多得多)

如果使用笔记本电脑或台式机,它现在有很多RAM(几GB),因此很可能所有数据都可以存储在内存中。RAM带宽也比磁盘、SSD或网络带宽高得多(RAM延迟也低得多)。 如果您使用数据库系统管理大量数据(超过1GB),这是明智的(尤其是,因为您可能不会一次写入所有数据)


您可能对…感兴趣。

您不能在文件中插入或删除某些字节序列。您只能覆盖现有字节,或在文件末尾追加新字节(这就是
文件的标准化方式,POSIX或Windows文件的行为方式,以及几乎所有(我不知道今天有任何例外)的工作方式)

因此,您可以从旧文件生成一个新文件(然后可能将新文件重命名为旧文件)

您还可以读取内存中的所有文件,并从内存中输出整个新内容

你可能应该考虑更高层次的抽象:索引文件LALA或简单数据库(LA或真实数据库等)

请注意,当前的处理器比磁盘快得多(访问时间大约是磁盘的100万倍,访问时间在十几毫秒内,可能是磁盘的1000倍,访问时间大约为100微秒)。因此,这很有意义(而且非常重要)