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

在vb6中使用ini文件,文件路径有问题,vb6,path,ini,Vb6,Path,Ini,我读过很多关于如何在VB6项目中使用INI文件的文章。我对这些方法没有问题,我的问题是如何让EXE文件找到INI文件。我不想硬编码程序中的路径。我只是希望EXE希望INI文件出现在执行EXE的文件夹中 当我从VB6 IDE内部运行该程序时,会找到并处理INI。当我编译程序并运行EXE时,什么也找不到 我的代码如下所示: gServer = sGetINI(sINIFile, "TOOLBOM", "ServerName", "?") 其中,TOOLBOM是[Section],ServerNam

我读过很多关于如何在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

在VB6中,您可以使用App.Path指定文件的路径,这些文件应位于您执行操作的目录中。e、 g

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

您遇到的错误是什么?

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

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

您遇到的错误是什么?

一旦有人尝试在Vista或更高版本上运行它,该操作就会失败

可写数据文件不应进入程序文件。由于人们总是这样做,Windows开始从Vista开始执行规则


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

但一旦有人试图在Vista或更高版本上运行它,就会失败

可写数据文件不应进入程序文件。由于人们总是这样做,Windows开始从Vista开始执行规则


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

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

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

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


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

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


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

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

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

将EXE保存在同一文件夹中

将EXE保存在同一文件夹中

除非您必须使用INI文件,否则最好通过SaveSetting和GetSetting使用注册表。管理员可以禁止非管理员更新程序文件目录中的文件,因此如果保存在App.Path中,则您的程序无法更新INI设置+1对于答案,尽管从Vista开始,大部分注册表都是禁止标准用户使用的。Microsoft建议您移回INI文件,因为注册表污染已成为一个问题。但一旦有人尝试在Vista或更高版本上运行它,此操作就会失败。可写数据文件不应进入程序文件。由于人们总是这样做,Windows开始从Vista开始强制执行规则。作为一个VB6的老前辈,我应该警告您,如果您的应用程序安装在驱动器根目录中,例如C:,则app.Path将返回一个带有尾随反斜杠的字符串,例如C:,并且您的字符串中将有两个反斜杠。现在,只有当你的应用程序位于CDS的根目录下时才有意义除非你必须使用INI文件,否则最好通过SaveSetting和GetSetting使用注册表。管理员可以禁止非管理员更新程序文件目录中的文件,因此如果保存在应用程序中,您的程序将无法更新INI设置。
路径+1对于答案,尽管从Vista开始,大部分注册表都是禁止标准用户使用的。Microsoft建议您移回INI文件,因为注册表污染已成为一个问题。但一旦有人尝试在Vista或更高版本上运行它,此操作就会失败。可写数据文件不应进入程序文件。由于人们总是这样做,Windows开始从Vista开始强制执行规则。作为一个VB6的老前辈,我应该警告您,如果您的应用程序安装在驱动器根目录中,例如C:,则app.Path将返回一个带有尾随反斜杠的字符串,例如C:,并且您的字符串中将有两个反斜杠。现在只有当你的应用程序要放在一张CD的根目录中时才重要