繁体   English   中英

用于在特定文件夹C#中查找特定文件的自定义路径

[英]Custom Path for locating a specific file in specific folder c#

我想查看特定文件夹中的数据库文件,而我之前所做的是这样的:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:/Fuhans's Folder/Project/SIA - Point of Sales/SIA - Point of Sales/Assets/Database/db1.accdb; Persist Security Info=False;";

并且我认为这是查找数据库文件而不是编写特定文件夹的快捷方式吗?

我想出了:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=../Assets/Database/db1.accdb; Persist Security Info=False;";

但是,当我将其更改为第二种时,错误消息如下所示:

在此处输入图片说明

我的问题是:有没有办法删除bin位置路径,但是仍然像第二个一样查找数据库文件?

谢谢

在相对路径前面添加另一个../

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=../../Assets/Database/db1.accdb; Persist Security Info=False;";

您应该避免在连接字符串和相对路径中使用绝对路径( ..在部署时很容易被破坏)。

在ASP.NET中使用相对路径,您可以使用|DataDirectory|db1.accdb ,在WinForms中它不可用,但常数是使用Application Domain属性解析的。 只需在您的main()方法中设置基础浴即可:

AppDomain.Current.SetData("RootFolder",
    @"D:\Fuhans's Folder\Project\SIA - Point of Sales\SIA - Point of Sales");

和您的连接字符串:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|RootFolder|Assets/Database/db1.accdb;

为什么要使用绝对路径而不是相对路径? 因为它不受工作目录的影响,并且添加多个常量更容易:

AppDomain.Current.SetData("Bin",
    Application.StartupPath);
AppDomain.Current.SetData("AppData",
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));

第二个选项将与UAC更好地工作(其中程序的文件夹可能根本无法写入)。 还要注意,路径仍然可以导航,因为它将被规范化。

假设您要在开发环境中进行bin / debug编译:

Data Source=|Bin|../../Assets/Database/db1.accdb

假设您的应用程序将被部署并且将在数据文件夹(而不是程序文件夹)上运行:

Data Source=|AppData|Assets/Database/db1.accdb

直而容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM