【问题标题】:Certain fields in .ini files do not get saved if the path name of the .ini is longer than 128 chars如果 .ini 的路径名超过 128 个字符,则不会保存 .ini 文件中的某些字段
【发布时间】:2011-04-25 13:27:59
【问题描述】:

我正在使用 Visual Studio 2003 C++ 编写一个使用 .ini 文件保存数据的程序。程序已经写好了;它是一个完整的 Windows 应用程序,可以分析从睡眠实验室获取的患者数据(大量代码行)。

程序使用.ini 文件来读取和写入患者数据,例如患者姓名、患者ID、医生姓名...等。前几天我的老板告诉我,如果.ini 的路径太长,一些数据将无法保存。

经过进一步检查,我发现如果 .ini 文件的完整路径名超过 128 个字符,则该 .ini 文件中的某些字段不会保存到磁盘。这很奇怪,因为确实会保存其他字段,而其他字段则不会。

我不确定,这是 Windows 的问题,还是与代码有关?该代码使用 GetPrivateProfileString() 和 WritePrivateProfileString() 函数来写入和读取 ini 文件。据我所知,它对所有 ini 文件一视同仁,只在需要时读取它们,并在保存文件时写入它们。

我真的很好奇为什么当路径超过 128 个字符时有些字段会被保存而有些则不会。有没有人知道这个问题可能属于哪个领域以及幕后发生了什么?

程序是用: 视觉工作室 2003

操作系统是: 视窗XP

感谢您的帮助和见解:)

*******编辑: 原来代码使用 OpenFile 函数 http://msdn.microsoft.com/en-us/library/aa365430(VS.85).aspx 打开 ini 文件,而这只允许最多 128 个字符。

我将尝试在不破坏代码的情况下将功能更改为 CreateFile 函数......

【问题讨论】:

    标签: visual-c++ windows-xp


    【解决方案1】:

    我的猜测是在您的代码中某处有一个 128 字节的文件名 CHAR 缓冲区。根据代码路径是什么,在该缓冲区中使用较长的文件名字符串可能会或可能不会起作用。很可能某些写入可能有效而其他写入失败,但如果您的代码正确处理错误,您会认为您会通过适当的错误日志发现失败。

    【讨论】:

    • 原来它使用了一个名为 OpenFile() 的过时函数来加载 ini,而 OpenFile() 只接受最多 128 个字符路径名称。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2018-01-07
    • 1970-01-01
    • 2014-02-07
    • 2015-09-14
    • 2020-12-15
    • 2014-09-20
    相关资源
    最近更新 更多