1

我已经阅读了很多关于如何在我的 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
4

6 回答 6

4

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

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

于 2009-01-26T17:39:04.290 回答
4

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

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

你得到的错误是什么?

于 2009-01-23T04:00:51.270 回答
1

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

可写数据文件不应该进入程序文件。由于人们无论如何都这样做了,Windows 开始执行从 Vista 开始的规则。

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

于 2009-01-23T22:57:10.663 回答
0

您将需要使用脚本运行时中的 FileSystemObject 来正确组合路径和文件名。尽管在现实中这似乎是一个微不足道的问题,但 FileSystemObject 可以处理一些极端情况。

于 2009-01-24T04:43:56.143 回答
0

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

于 2010-01-16T10:07:24.733 回答
0

将EXE保存在同一文件夹中

于 2010-06-10T09:00:09.383 回答