C++ 在配置中编辑值。文件
目前,我正在使用ReadFile()和WriteFile()API从文件中写入和读取。如果数据大到可以再次写入,是否有API函数来替换/编辑文本?我只听说过SetFilePointer(),但我不太确定如何使用它来替换文件中的文本 例如,从文件中选择一个字符串/字符,例如,键2的值“0” 键1=0C++ 在配置中编辑值。文件,c++,winapi,C++,Winapi,目前,我正在使用ReadFile()和WriteFile()API从文件中写入和读取。如果数据大到可以再次写入,是否有API函数来替换/编辑文本?我只听说过SetFilePointer(),但我不太确定如何使用它来替换文件中的文本 例如,从文件中选择一个字符串/字符,例如,键2的值“0” 键1=0 键2=0 并将其更改为“1” 键1=0 Key2=1有很多用于随机访问文件的API。它们几乎都不适合处理文本文件 考虑一下,如果您不更改1位数字,而是将1改为2,即从1“改为20”,那么您不仅要实现“
键2=0 并将其更改为“1” 键1=0
Key2=1有很多用于随机访问文件的API。它们几乎都不适合处理文本文件
考虑一下,如果您不更改1位数字,而是将1改为2,即从1“改为20”,那么您不仅要实现“高效”的随机访问方式,还要实现“低效”的重新写入文件方式。因为您真正想要的是一种方式,即“低效”“一个是值得追求的 有很多用于随机访问文件的API。它们几乎都不适合处理文本文件
考虑一下,如果您不更改1位数字,而是将1改为2,即从1“改为20”,那么您不仅要实现“高效”的随机访问方式,还要实现“低效”的重新写入文件方式。因为您真正想要的是一种方式,即“低效”“一个是值得追求的 函数和WritePrivateProfileString可能有助于此。函数和WritePrivateProfileString可能有助于此。对于文本文件,最好将其读入内存,完成工作,然后将其写回。例如,将文件内容读入
std::string
,查找Key2=
,并用新值替换行的其余部分。然后再次保存字符串。您可以使用std::ifstream
从一个文件中读取,而无需一个WinAPI调用。对于文本文件,最好将它们读入内存,完成工作,然后写回。例如,将文件内容读入std::string
,查找Key2=
,并用新值替换行的其余部分。然后再次保存字符串。您可以使用std::ifstream
从一个文件中读取数据,而无需一个WinAPI调用。哪种文件类型适合以高效的方式执行此类操作?块结构的文件类型。但是,您将无法使用文本编辑器对其进行编辑,这是配置文件的主要要求之一。哪种文件类型适合以高效的方式进行此类操作?块结构文件。但是你不能用文本编辑器编辑它,这是配置文件的主要要求之一。@Neil:我也这么认为,没有提到它,因为我认为这是显而易见的。但事实并非如此。我刚才调用了WritePrivateProfileString,使用了filemon和网络嗅探器,发现如果不需要更改键值的长度,它不会写入整个文件。在我的PC(XP)上,当密钥大小相同时,它只写入4K。因此,在现实中,它可能非常有效。另一方面,数据的读取效率不是很高,因为它首先必须扫描文件才能找到更新位置。@Neil:我也这么认为,没有提到,因为我认为这是显而易见的。但事实并非如此。我刚才调用了WritePrivateProfileString,使用了filemon和网络嗅探器,发现如果不需要更改键值的长度,它不会写入整个文件。在我的PC(XP)上,当密钥大小相同时,它只写入4K。因此,在现实中,它可能非常有效。另一方面,数据的读取效率不高,因为它首先必须扫描文件以找到更新位置。