我读过很多关于如何在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
答案 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保存在同一文件夹中