好的。我觉得这应该是在编程101,但我似乎找不到一个合适的答案,如何将文件路径名设置为足够动态,以便明确设置为exe的安装位置。
基本上,这个应用程序实际上将安装在用户的个人文件夹中,可能类似于本地数据,我需要将程序创建的txt文件创建到与可执行文件相同的目录中。
当前路径:
Dim strFilePath As String = "D:DevelopmentBobbyPrototypingReplication Desktop ClientReplication_Desktop_ClientClientAccessList.txt"
我想把它设置成类似的东西
Dim strCurrentLocationOfEXE As String = HardDriveLetter & Users & CurrentUserPath & InstalledDirectory
Dim strFilePath As String = strCurrentLocationOfEXE & "ClientAccessList.txt"`
但我一辈子都不知道如何让它确定这一点,因为它不会总是安装在同一个文件夹中(即用户名和硬盘号可能不同(。
想法?
您可以获得使用运行程序集的路径
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
这将为您提供可执行文件的文件路径:
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程序集可执行文件,例如通过COM将代码作为库调用,则Assembly.GetEntryAssembly
可以返回Nothing
。在这种情况下,您可能希望通过调用Environment.GetCommandLineArgs()(0)
从命令行使用可执行文件路径。如果由于某种原因失败了,您可以始终使用Directory.GetCurrentDirectory()
。