为txt保存设置正确的文件路径-vb.NET

为txt保存设置正确的文件路径-vb.NET,vb.net,installation,save,setting,filepath,Vb.net,Installation,Save,Setting,Filepath,好的。我觉得这应该是编程101,但我似乎找不到一个像样的答案,如何将文件路径名设置为动态的,以便显式地设置为exe的安装位置 基本上,这个应用程序实际上将安装在用户的个人文件夹中,可能类似于本地数据,我需要获得一个由程序创建的txt文件,该文件将被创建到与可执行文件相同的目录中 当前路径: Dim strFilePath As String = "D:\Development\Bobby\Prototyping\Replication Desktop Client\Replication_Des

好的。我觉得这应该是编程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"`
但我一辈子都不知道如何让它确定,因为它不会总是安装在同一个文件夹中(即用户名和硬盘驱动器号可能会有所不同)


想法?

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

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")

但是需要注意的是:
Assembly.GetEntryAssembly
可以在没有.NET程序集可执行文件的情况下返回
Nothing
,例如,如果通过COM将代码作为库调用。在这种情况下,您可能希望通过调用
Environment.GetCommandLineArgs()(0)
从命令行使用可执行文件路径。如果由于某种原因失败,您可以始终求助于
目录。GetCurrentDirectory()

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

Dim fullPath = System.Reflection.Assembly.GetExecutingAssembly().Location
Dim folderName = Path.GetDirectoryName( fullPath )
Dim strFilePath = Path.Combine(folderName, "ClientAccessList.txt")
如果您想引用此应用程序的当前用户个人文件夹,那么方法是通过枚举。
此枚举独立于底层操作系统(XP、Win7、x64、x32等) 在这种情况下,您可以使用:

Dim fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Dim strFilePath = Path.Combine(fullPath, "your_app_reserved_folder", "ClientAccessList.txt")
在本例中,
“您的应用程序\u保留\u文件夹”
应该是在安装应用程序期间创建的文件夹,您可以在其中放置每个用户的数据文件。(通常,这是存储数据文件的推荐方法,这些数据文件应由用户分开保存)

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

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

您需要查找操作系统特定的环境变量。。。请看这里的介绍:让我通过提问来更改它,这是否可以将txt文件保存在用户漫游应用程序数据文件夹中,以及它是否也可以正确创建复制客户端文件夹
Dim strCurrentAppDataPath As String=Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData&“\Replication Client”)Dim strFilePath As String=strCurrentAppDataPath&“\ClientAccessList.txt”
如果要创建新文件夹,需要将其作为单独的步骤显式创建。最好使用
路径。组合
而不是自己直接连接路径。明白了,这就是我的想法。使用path.combine比自己连接要好吗?连接当然会起作用,只是
path.combine
为您提供了额外的抽象层,以防路径的格式与当前操作系统中预期的不同。例如,可能有人在Mono下的linux机器上运行你的应用程序,在这种情况下,应该使用正斜杠而不是反斜杠。这没什么大不了的,但这只是一个很好的练习。好吧,我要改变我的问题。看一看问题注释这项工作返回程序集运行的路径。它可能与当前用户的漫游文件夹或本地文件夹不同。如果您希望从用户文件夹中获得独立路径,那么可以选择Environment.SpecialFolder enumerationMhmm。。。因此,我认为我不希望将txt文件保存到程序集位置,而只是保存在用户漫游的appdata中。我需要知道的是,在尝试设置文件夹数据路径之前,是否还要创建逻辑来检查文件夹“复制客户端”是否也存在?或者如果它不存在,它会自动创建吗…?不,正如我所说,文件夹不会自动存在,只是因为您正在引用它。但是,检查文件夹的存在是非常简单的。好的,我对我的问题进行了修改。看一看问题注释我想我宁愿把它保存在appdata文件夹中,但我只需要它足够动态,以获得正确的用户appdata漫游文件夹。。。