2012-05-17 92 views
1

我在Visual Studio中製作Windows窗體應用程序。我在相對路徑上遇到一些困難。 例如,使用相對路徑「\ Databases \ bla.mdb」連接到具有OleDbConnection的數據庫時,從Visual Studio進行調試時效果很好。但是,如果可執行文件的路徑是somepath \調試\ APP.EXE,數據庫實際上是在somepath \數據庫\ bla.mdb」Windows窗體應用程序中的相對路徑

那是哪裏定義設置‘這是正在使用的基本路徑’ ?我查申請:: CommonAppDataPath,ExecutablePath,StartupPath,UserAppDataPath和LocalUserAppDataPath,沒有返回「somepath」。

最終的想法是,數據庫文件夾將在同一文件夾中的可執行文件,但如果我硬編碼與ExecutablePath什麼像這樣,它在調試時不起作用...如果我保持原樣,在我的計算機中工作正常(調試並使用與.exe相同的文件夾中的Databases文件夾進行部署),但是我在另一個文件夾中嘗試過筆記本電腦,它搜索數據庫後在My Documents內某處。

我會很感激任何建議,答案或方向。我的谷歌搜索目前沒有幫助

+0

數據庫駐留的路徑應寫入配置文件中。部署後,您的設置應該更新該文件/路徑。關鍵的好處是:沒有更多的麻煩在應用程序內部進行神祕的處理,如果出現需要移動的簡單管理。 – Steve

回答

1

最終的想法是,數據庫文件夾將在同一文件夾作爲可執行

這意味着你的調試目錄佈局是不一樣的部署目錄佈局?

這不是一個好計劃。與其試圖在應用程序的根目錄中重新調試應用程序的根目錄以用於調試vs部署中的相對路徑,您應該嘗試在兩種情況下匹配目錄佈局。

+0

我認爲他遇到了Application.Startup路徑不一致的問題,具體取決於程序的啓動方式。例如,如果StartupDirectory與可執行文件的目錄不相同,則從計劃任務開始。有一些愚蠢的東西可以搞砸了。 – David

+0

這行真的引起了我的注意 - 「可執行文件的路徑是somepath \ Debug \ app.exe,數據庫實際上是在某個路徑\ Databases \ bla.mdb中」「 – Snixtor

+0

是的,這是完全正確的,佈局是不一樣的。部署目錄佈局與「somepath」目錄相同,但調試目錄在「somepath/debug」中。 – Rojo

2

AppDomain.CurrentDomain.BaseDirectory會以可執行文件的根目錄作爲字符串。我通常System.IO.Path.Combine用它作爲

string DbLocation = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases\bla.mdb"; 

你需要一個using語句的System.Reflection爲它工作。

+0

因此,您同意我應該將所有資源移動到可執行文件所在的「somepath/Debug」目錄中的子文件夾中,然後使用絕對路徑,與AppDomain.Cu一起構建....因此,如果我曾經想要在發佈模式下從VS進行測試,我應該複製「somepath/Release」中的資源? – Rojo

+0

不,我認爲它應該放在不同的文件夾中。如果您更新客戶端並且不小心,將其存儲在該文件夾中會有覆蓋它的風險。您的.mdb會覆蓋他們存儲數據的那個。我剛剛回答了這個問題,即如何找到與可執行文件相關的文件。就個人而言,我會將.mdb存儲在硬盤驅動器的其他任何位置,或者使用SQL Server Express代替。 – David

+0

我看到了,非常感謝 – Rojo

1

在您的應用程序中,您應該更喜歡絕對路徑以確保安全。

就像你發現的那樣,如果使用相對路徑,那麼你的應用程序的啓動文件夾的簡單改變可能完全改變你的目標路徑。啓動文件夾可能是也可能不是包含您的可執行文件的文件夾,並且幾乎不受您的控制(因爲最終用戶可以在命令提示符下的任何文件夾下自由執行您的可執行文件)。

因此,您可以使用David建議從相對路徑形成絕對路徑。您也可以使用庫如http://filedirectorypath.codeplex.com/

相關問題