在vb6中使用ini文件,文件路径有问题

时间:2009-01-23 03:48:54

标签: vb6 path ini

我读过很多关于如何在VB6项目中使用INI文件的文章。我的方法没有问题,我的问题是如何让EXE文件找到INI文件。我不想在程序中硬编码路径。我只是希望EXE期望INI文件出现在执行EXE的同一文件夹中。

当我从VB6 IDE中运行程序时,会找到并处理INI。当我编译程序并运行EXE时,找不到任何内容。

我的代码如下:

gServer = sGetINI(sINIFile, "TOOLBOM", "ServerName", "?")

其中TOOLBOM是[Section],“ServerName”是值的关键。

我获得了API的以下代码:

Rem API DECLARATIONS
Declare Function GetPrivateProfileString Lib "kernel32" Alias _
                 "GetPrivateProfileStringA" (ByVal lpApplicationName _
                 As String, ByVal lpKeyName As Any, ByVal lpDefault _
                 As String, ByVal lpReturnedString As String, ByVal _
                 nSize As Long, ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileString Lib "kernel32" Alias _
                 "WritePrivateProfileStringA" (ByVal lpApplicationName _
                 As String, ByVal lpKeyName As Any, ByVal lpString As Any, _
                 ByVal lpFileName As String) As Long
Public Function sGetINI(sINIFile As String, sSection As String, sKey _
                As String, sDefault As String) As String
    Dim sTemp As String * 256
    Dim nLength As Integer
    sTemp = Space$(256)
    nLength = GetPrivateProfileString(sSection, sKey, sDefault, sTemp, _
              255, sINIFile)
    sGetINI = Left$(sTemp, nLength)
End Function
Public Sub writeINI(sINIFile As String, sSection As String, sKey _
           As String, sValue As String)
    Dim n As Integer
    Dim sTemp As String
    sTemp = sValue
    Rem Replace any CR/LF characters with spaces
    For n = 1 To Len(sValue)
        If Mid$(sValue, n, 1) = vbCr Or Mid$(sValue, n, 1) = vbLf _
        Then Mid$(sValue, n) = " "
    Next n
    n = WritePrivateProfileString(sSection, sKey, sTemp, sINIFile)
End Sub

6 个答案:

答案 0 :(得分:4)

在VB6中,您可以使用App.Path指定应该在您执行的目录中的文件的路径。 e.g。

sIniFile = App.Path & "\myIniFile.ini"

你得到的错误是什么?

答案 1 :(得分:4)

鲍勃是对的,只要有人试图在Vista或更高版本上运行它,它就会失败。可写数据文件不应该放在Program Files中。 Windows现在强制执行这些规则。所有用户的全局设置属于一个文件夹,另一个用户设置属于另一个用户,另一个用户漫游设置等等。

Karl Peterson的这个Visual Studio Magazine article提供了一些VB6代码,您可以将这些代码放入项目中,以便在运行时查找这些文件夹的位置。然后,同一作者的this previous article为您提供了一个使用INI文件的好类,以隐藏那些API声明。

答案 2 :(得分:1)

一旦有人试图在Vista或更高版本上运行它,这将失败。

可写数据文件不应该进入程序文件。自从人们这样做以来,Windows开始执行从Vista开始的规则。

全局设置属于CommonAppData下的应用程序文件夹,每用户设置低于LocalAppData,AppData下的每次使用漫游设置,依此类推。这些位置在运行时通过Shell对象或API调用检索。

答案 3 :(得分:0)

您将需要使用Scripting运行时中的FileSystemObject来正确组合路径和文件名。虽然现实中看起来似乎是一个微不足道的问题,但FileSystemObject会处理这些问题。

答案 4 :(得分:0)

app.path将返回当前正在执行的exe的路径,使用它

答案 5 :(得分:0)

将EXE保存在同一文件夹中