对于各种Section / Key组合,GetPrivateProfileString有时会返回0

时间:2013-11-05 22:18:22

标签: .net vb.net ini

有一个关于ini文件和getPrivateProfileString的新问题 - 令人沮丧的是他们已经在一起工作了大约3年,而在过去的几天里,有些东西导致他们吓坏了,并且时不时地返回我正在寻找的其中一个领域没什么。我已经与维护服务器的人进行了核实,没有任何改变,他们知道。

我查看了this answer,尝试从文件中删除BOM,并在第一行添加额外的换行符 - 两者都无效。

奇怪的是,每次都没有相同的部分/组合键,也不是所有部分都相同 - 我注意到这发生在目前为止来自4个不同部分的键,通常我正在加载的只有一个键失败,尽管一次运行最多只有3个(大约20个)。我很难过。

以下是调用GetPrivateProfileString:

的代码
Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileStringW" (ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Int32, _
ByVal lpFileName As String) As Int32

Public Overloads Shared Function INIRead(ByVal INIPath As String, _
ByVal SectionName As String, ByVal KeyName As String, _
ByVal DefaultValue As String) As String
        Dim n As Int32
        Dim sData As String
        sData = Space$(1024)
        n = GetPrivateProfileString(SectionName, KeyName, DefaultValue, _
        sData, sData.Length, INIPath)
        If n > 0 Then
            INIRead = sData.Substring(0, n)
        Else
            INIRead = ""
        End If
    End Function

' elsewhere in the code...
Dim db_conn as String
db_conn = INIRead(iniFile, "DATABASE", "SecurityDB")

再次,大多数对这项工作的调用,但有些人没有,而且它正在努力。谢谢!

1 个答案:

答案 0 :(得分:0)

最后,最终工作的是我们使用服务器名称而不是DFS路径(即。\\fileserver01\Software\Config.ini而不是\\customDFSPath\OtherDir\Config.ini)设置ini文件的路径。显然他们最近升级到了Windows Server 2012 R2,并且有人提到DFS系统存在速度慢,这导致了这个问题。