2

我正在更新一个相当旧的应用程序。它使用 INI 文件访问所有代码,在这里和那里创建和释放 INI 访问类实例。

我想将其集中到几个单个实例中,每个使用的文件一个。因此,我们将摆脱在任何地方创建/释放复制粘贴的实例,并且可以自由地完全替换这些类,这将决定从 INI 切换到其他设置存储。

是否应该调用 WritePrivateProfileString(NULL, NULL, NULL...) 来应用更改?假设: 1) 访问直接访问真实的 INI 文件,而不是注册表映射的文件。2)操作系统是NT家族的(可能很少是Win2000,很可能是WinXP及更高版本)。Win9x/ReactOS/WinE/Odin/etc 不关心。

那么,我们现在是否应该明确地刷新 ini 储蓄?

NT 不缓存注册表键写入,现在不需要 regFlushKey。但是 INI 文件呢?

关于 WritePrivateProfileString 的 MSDN 页面仅描述了 wrt Win9x 和 NT File-to-Reg 映射的刷新技术。它对真正的 INI 文件保持沉默。

4

1 回答 1

2

文档自相矛盾(我的粗体):

系统保留最新注册表文件映射的缓存版本以提高性能。如果所有参数都为 NULL,则该函数会刷新缓存。当系统正在编辑文件的缓存版本时,编辑文件本身的进程将使用原始文件,直到缓存被清除。

Windows 是在缓存映射还是文件(什么文件)?但是示例代码中的注释说明了这一点:

// Force the system to read the mapping into shared memory 
// so that future invocations of the application will see it 
// without the user having to reboot the system

它是缓存的注册表文件映射。如果您更改注册表中的映射,则需要告诉 Windows 刷新其缓存。

这也与 Windows 3.1 中 API 的使用一致,您不需要刷新任何内容。Windows 不太可能从根本上改变 API 的使用。

为了仔细检查,我WritePrivateProfileString在运行Process Monitor时打电话。正如预期的那样,Windows 打开 INI 文件,更新它并再次关闭它。

无需冲洗。

于 2012-06-07T19:49:44.700 回答