2013-04-08 117 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