【问题标题】:Edit values in config. file编辑配置中的值。文件
【发布时间】:2011-01-08 20:39:52
【问题描述】:

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

例如,从文件中选择一个字符串/字符,比如 Key2 的值​​ '0'。

Key1 = 0
Key2 = 0

并将其更改为“1”。

Key1 = 0
键2 = 1

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

    有很多用于随机访问文件的 API。它们几乎完全不适合处理文本文件。

    考虑如果不是更改 1 个数字,而是从 1 更改为 2 - 即从 1" 更改为 "20",那么您不仅要实现“高效”的随机访问方式,还要实现“低效”重写文件的方式。因为你真的只想要一种做事方式,所以“低效”的方式就是要采用的方式。

    【讨论】:

    • 哪种文件类型适合这种高效的操作?
    • 一个块结构的。但是您将无法使用文本编辑器对其进行编辑,这是对配置文件的主要要求之一。
    【解决方案2】:

    GetPrivateProfileString 和 WritePrivateProfileString 函数可能对此很有用。

    【讨论】:

    • @Neil:我也假设了这一点,但没有提及,因为我认为这很明显。但事实证明并非如此。我刚才调用了 WritePrivateProfileString 并使用了 filemon 和网络嗅探器,发现如果不需要更改键值的长度,它不会写入整个文件。在我的 PC (XP) 上,它只在密钥大小相同时写入 4K。因此,实际上,它可能非常有效。另一方面,数据的读取效率并不高,因为它必须首先扫描文件才能找到更新位置。
    【解决方案3】:

    对于文本文件,最好将它们读入内存,完成工作,然后再写回。例如,将文件内容读入std::string,查找Key2 = 并将该行的其余部分替换为新值。然后再次保存字符串。您可以使用std::ifstream 从文件中读取而无需一次 WinAPI 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-12
      • 2010-12-10
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多