2013-04-08 68 views
3

好的。我觉得这应该是编程101,但我似乎无法找到一个体面的答案如何设置一个文件路径名足够动态,以明确设置exe的安装位置。为txt保存设置正确的文件路径 - vb.NET

基本上,这个应用程序实际上将安装在用户个人文件夹中,可能类似于本地数据,并且我需要将由程序创建的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"` 

,但我不能为我的生活弄清楚如何得到它的确定,因为它不会总是被安装到相同的文件夹(即用户名,也许硬盘驱动器的字母会有所不同)。

想法?

+0

你需要寻找操作系统特定environement变量...看看这里的介绍:http://en.wikipedia.org/wiki/Environment_variable – Minus 2013-04-08 19:14:28

+0

让我改变它问,这会工作将txt文件保存在用户漫游应用程序数据文件夹中,并且它是否能够正确创建Replication Client文件夹? 'Dim strCurrentAppDataPath As String = Environment.GetFolderPath(Environment.SpecialFolder。ApplicationData&“\ Replication Client”) Dim strFilePath As String = strCurrentAppDataPath&“\ ClientAccessList.txt”' – 2013-04-08 19:18:39

+0

如果您想创建一个新文件夹,您需要将其明确地创建为一个单独的步骤。最好使用'Path.Combine'而不是直接连接路径。 – 2013-04-08 19:24:55

回答

2

,其中组件与

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

运行,如果你想引用当前用户的个人文件夹此应用程序,然后要走的路你可以得到的路径是通过Environment.SpecialFolder enumaration。
这个枚举是独立于底层操作系统(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 
+0

好吧,所以我有一个改变对我的问题。看看问题的评论 – 2013-04-08 19:17:38

+0

这工作返回程序集运行的路径。它可能与当前用户的漫游或本地文件夹不同。如果你想要一个从用户文件夹的独立路径,然后要走的路是Environment.SpecialFolder枚举 – Steve 2013-04-08 19:20:13

+0

Mhmm ...所以我想我不希望txt文件保存到程序集的位置,只是在用户漫游appdata。我需要知道的是,我将不得不创建逻辑来检查在试图设置文件夹数据路径之前是否存在文件夹“复制客户端”?或者如果它不在那里,它会自动创建...? – 2013-04-08 19:25:33

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

有一点要注意的一点,虽然:Assembly.GetEntryAssembly可以返回Nothing如果没有.NET程序集可执行文件,例如,如果代码被称为作为一个图书馆通过COM。在这种情况下,您可能需要通过调用Environment.GetCommandLineArgs()(0)从命令行使用可执行文件路径。如果失败了,出于某种原因,你总是可以使用Directory.GetCurrentDirectory()

+0

好的,所以我改变了我的问题。看看这个问题的意见 – 2013-04-08 19:19:52

+0

我想我宁愿将它放在appdata文件夹中,但我只是需要它足够的动态来获得正确的用户appdata漫游文件夹... – 2013-04-08 19:22:10