1

我在 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 相同的文件夹中的Databases 文件夹进行调试和部署)但我在另一台笔记本电脑上尝试过它,它会在.exe 中的某处搜索Databases 文件夹My Documents

我将不胜感激任何建议、答案或方向。到目前为止,我的谷歌搜索没有帮助

4

3 回答 3

2

AppDomain.CurrentDomain.BaseDirectory将以字符串形式获取可执行文件的根目录。我通常将它与 System.IO.Path.Combine 一起使用,如

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

您需要 System.Reflection 的 using 语句才能使其工作。

于 2012-05-17T23:44:08.200 回答
1

最后的想法是数据库文件夹将与可执行文件位于同一文件夹中

意味着您的调试目录布局与部署目录布局不同?

这不是一个好计划。与其尝试在调试与部署中为相对路径“重新定位”应用程序的根目录,不如尝试匹配两种方案的目录布局。

于 2012-05-17T23:47:25.847 回答
1

在您的应用程序中,为了安全起见,您应该更喜欢绝对路径。

就像您发现的那样,如果使用相对路径,那么简单更改应用程序的启动文件夹可能会完全改变您的目标路径。启动文件夹可能是也可能不是包含您的可执行文件的文件夹,它几乎不受您的控制(因为最终用户可以在命令提示符下在他们喜欢的任何文件夹下自由执行您的可执行文件)。

因此,您可以使用 David 推荐的方法从相对路径形成绝对路径。您还可以使用诸如http://filedirectorypath.codeplex.com/之类的库

于 2012-05-18T02:18:10.533 回答