Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在配置中编辑值。文件_C++_Winapi - Fatal编程技术网

C++ 在配置中编辑值。文件

C++ 在配置中编辑值。文件,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”,那么您不仅要实现“

目前,我正在使用ReadFile()和WriteFile()API从文件中写入和读取。如果数据大到可以再次写入,是否有API函数来替换/编辑文本?我只听说过SetFilePointer(),但我不太确定如何使用它来替换文件中的文本

例如,从文件中选择一个字符串/字符,例如,键2的值“0”

键1=0
键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。因此,在现实中,它可能非常有效。另一方面,数据的读取效率不高,因为它首先必须扫描文件以找到更新位置。