我在Visual Studio中制作Windows窗体应用程序。我对相对路径有些困难。 例如,使用OleDbConnection连接到数据库,其相对路径为" \ Databases \ bla.mdb"从Visual Studio调试时工作得很好。但是,如果可执行路径是somepath \ Debug \ app.exe,则数据库实际上位于somepath \ Databases \ bla.mdb"
在哪里定义"基本路径"那个被使用了? 我检查了Application :: CommonAppDataPath,ExecutablePath,StartupPath,UserAppDataPath和LocalUserAppDataPath,没有返回" somepath"。
最后的想法是,Databases文件夹将与可执行文件位于同一文件夹中,但如果我使用ExecutablePath或类似的东西对其进行硬编码,则在调试时它不起作用...如果我离开它因为,在我的计算机中它工作正常(调试和部署与.exe相同的文件夹中的数据库文件夹)但我在另一台笔记本电脑中尝试它,它搜索My Documents
内的某个数据库文件夹。
我很欣赏任何建议,答案或方向。到目前为止,我的谷歌搜索还没有帮助
答案 0 :(得分:2)
AppDomain.CurrentDomain.BaseDirectory将以字符串形式获取可执行文件的根目录。我通常将它与System.IO.Path.Combine一起使用,如
string DbLocation = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases\bla.mdb";
您需要System.Reflection的using语句才能工作。
答案 1 :(得分:1)
最后的想法是Databases文件夹将与可执行文件
位于同一文件夹中
这意味着您的调试目录布局与部署目录布局不同?
这不是一个好计划。您应该尝试匹配两种方案的目录布局,而不是尝试将应用程序的根目录“重新定位”为调试与部署中的相对路径。
答案 2 :(得分:1)
在您的应用中,您应该更喜欢绝对的安全路径。
就像你发现的那样,如果使用相对路径,那么简单更改应用程序的启动文件夹可能会完全改变目标路径。启动文件夹可能是也可能不是包含可执行文件的文件夹,它几乎不受您的控制(因为最终用户可以在命令提示符下的任何文件夹下自由执行您的可执行文件。)
因此,您可以使用David建议从相对路径形成绝对路径。您也可以使用http://filedirectorypath.codeplex.com/
等库