定位在特定的文件夹中的特定文件c#
我想在特定的文件夹数据库的文件,我做了什么之前,查找自定义路径是这样的:定位在特定的文件夹中的特定文件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;";
谢谢!你是最棒的。 – 2014-10-29 11:51:26
你应该避免你的连接字符串和相对路径中使用绝对路径(与..
是很容易被打破当你部署)。你可以使用|DataDirectory|db1.accdb
In ASP.NET to use a relative路径,在的WinForms它不是可用但常数使用应用程序域特性解决。只需将您的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(其中程序的文件夹可能不会写在所有)。还要注意路径仍然是可导航,因为它会被标准化。
假设你的编译于斌/调试的开发环境:
Data Source=|Bin|../../Assets/Database/db1.accdb
假设您的应用程序将被部署,它会在数据文件夹(不是程序文件夹)工作:
Data Source=|AppData|Assets/Database/db1.accdb
简单而直接。
但是,这使得应用程序必须安装在特定的文件夹右先生@Adriano Repetti?如果用户将文件夹更改为与设置的字符串不匹配的其他内容,会发生什么情况?和“容易被打破”,你指的是什么先生?这怎么可能?谢谢 – 2014-10-29 11:54:11
@UnknownUser当然不应该使用硬编码路径!容易被破坏,因为相对路径会受到工作目录的影响,如果你声明'RootFolder'是'Application.StartupPath',那么连接字符串中的路径将始终以可执行路径为根。另外请注意,如果您正在编译为'root \ debug \ release',那么您仍然可以合并,您的**绝对路径将为'| RootFolder | .. \ .. \ assets \ db1.accdb'。请注意,您可以定义**多个常量**(例如对于“AppData”目录),UAC程序文件夹可能不可写... – 2014-10-29 12:05:13
+1您的清晰解释先生@Adriano Repetti。先生非常感谢您。 – 2014-10-29 12:48:05
谢谢你为这个问题投票的人:) – 2014-10-29 11:45:46