2011-10-31 57 views
3

我想使用數據文件並從WinForms應用程序中讀取它。如果我使用像Application.ExecutablePath或Application.StartupPath這樣的方法,它們會引用文件夾.. \ bin \ debug,這在非VS託管應用程序中是不同的。我想使用一個脫離根文件夾的文件夾並獲取對它的引用,無論我是否處於調試模式,即它總是正常工作。想要將WinForm應用程序的數據文件放在文件夾中並在代碼中獲取路徑

什麼是一個好辦法嗎?我不想使用嵌入式資源文件,也不使用硬編碼完整路徑。它需要是應用程序根文件夾的相對路徑。

喜歡的東西〜/ App_Data文件在ASP.NET

增加:

我想使用相對路徑關閉 「一些路徑」。無論我處於調試模式,非調試模式還是部署應用程序,VS「尋找某個路徑」都是我所追求的。就像ASP.NET的「〜」一樣。它不關心網站的位置,或者你在VS.我不想在'debug'文件夾下創建一個文件夾。無論如何,它都是相同的文件夾。 「某些文件夾」也不在VS的應用程序文件夾中,因爲該應用程序將被壓縮以便在未部署或發佈的情況下使用。

+0

什麼是「應用的根文件夾」?您不會將您的項目發送給您的客戶。它實際上是Path.GetDirectoryName(StartupPath),它正確地給出程序的位置,無論它位於何處或它如何託管。在那裏複製您的數據。具有複製到輸出目錄的構建系統支持。 –

回答

1

我的解決方案。走了兩個文件夾級別,然後將數據文件夾:

string appPath = Path.GetDirectoryName(Application.ExecutablePath); 

    System.IO.DirectoryInfo directoryInfo = System.IO.Directory.GetParent(appPath); 
    System.IO.DirectoryInfo directoryInfo2 = System.IO.Directory.GetParent(directoryInfo.FullName); 

    string path = directoryInfo2.FullName + @"\data"; 
0

只要您的數據文件也將在發佈和產品部署中位於容器中,ExecutablePath將正常工作。重點更多的是,通常情況下,這不是最好的地方有像數據庫那樣更改文件,我認爲你應該使用ApplicationData這樣的SpecialFolders。

1

嘗試訪問當前執行的程序集的位置:

string path = System.Reflection.Assembly.GetExecutingAssembly().Location 
string fullFilePath = Path.Combine(path, "myfile"); 
..do something with your data file. 

這樣,您就被執行了你的EXE/DLL組件目錄。然後你可以爲你的數據文件創建一個子目錄。這個sometiomes不適用於單元測試框架。

+0

如果程序安裝到類似'\ Program Files ...「的文件中,這將不起作用。用戶可能沒有該目錄的必要權限 –

+0

當我處於VS調試模式時,它指向debug \ bin。與我發佈的示例沒有什麼不同。 –

0

你可能想使用Environment.GetFolderPath方法,並向其傳遞enums for the various sytem data folders之一。完整通話可能看起來像

return Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
相關問題