3

好的。我觉得这应该是编程 101,但我似乎找不到关于如何将文件路径名设置为足够动态以明确设置到安装 exe 的位置的正确答案。

基本上,这个应用程序实际上将安装在用户个人文件夹中,可能类似于本地数据,我需要获取一个由程序创建的 txt 文件,以便创建到与可执行文件相同的目录中。

当前路径:

Dim strFilePath As String = "D:\Development\Bobby\Prototyping\Replication Desktop Client\Replication_Desktop_Client\ClientAccessList.txt"

我想将其设置为类似

Dim strCurrentLocationOfEXE As String = HardDriveLetter & Users & CurrentUserPath & InstalledDirectory
Dim strFilePath As String = strCurrentLocationOfEXE & "\ClientAccessList.txt"`

但我不能为我的生活弄清楚如何让它确定,因为它不会总是安装到同一个文件夹(即用户名和硬盘驱动器号可能会不同)。

想法?

4

2 回答 2

2

您可以获得程序集运行的路径

Dim fullPath = System.Reflection.Assembly.GetExecutingAssembly().Location
Dim folderName = Path.GetDirectoryName( fullPath )
Dim strFilePath = Path.Combine(folderName, "ClientAccessList.txt")

如果您想引用此应用程序的当前用户个人文件夹,那么方法是通过Environment.SpecialFolder枚举。
此枚举独立于底层操作系统(XP、Win7、x64、x32 等)在这种情况下,您可以使用:

Dim fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Dim strFilePath = Path.Combine(fullPath, "your_app_reserved_folder", "ClientAccessList.txt")

在此示例"your_app_reserved_folder"中,应该是在安装应用程序期间创建的文件夹,您可以在其中放置每个用户的数据文件。(通常这是推荐的存储数据文件的方法,这些数据文件应该由用户分开)

如果您想在尝试使用之前检查文件夹是否存在,只需将获取文件名的逻辑封装在方法中

Public Function GetUserAppClientAccessList() As String

    Dim fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    Dim appFolder = Path.Combine(fullPath, "your_app_reserved_folder")
    if Not Directory.Exists(appFolder) then
        Directory.Create(appFolder)
    End If
    return = Path.Combine(appFolder, "ClientAccessList.txt")
End Function
于 2013-04-08T19:16:02.640 回答
0

这将为您提供可执行文件的文件路径:

Assembly.GetEntryAssembly().Location

然后要获取文件夹路径,您可以调用Path.GetDirectoryName. 因此,要获取文本文件路径,您可以执行以下操作:

Dim exeFilePath As String = Assembly.GetEntryAssembly().Location
Dim exeFolderPath As String = Path.GetDirectoryName(exeFilePath)
Dim filePath As String = Path.Combine(exeFolderPath, "ClientAccessList.txt")

不过要注意一点:如果没有 .NET 程序集可执行文件,则Assembly.GetEntryAssembly可以返回Nothing,例如,如果代码通过 COM 作为库调用。在这种情况下,您可能希望通过调用命令行来使用可执行文件路径Environment.GetCommandLineArgs()(0)。如果失败了,出于某种原因,你总是可以求助于Directory.GetCurrentDirectory().

于 2013-04-08T19:15:33.093 回答