C# 用于在特定文件夹c中定位特定文件的自定义路径
我想查看特定文件夹中的数据库文件,我之前所做的工作如下:C# 用于在特定文件夹c中定位特定文件的自定义路径,c#,database,winforms,C#,Database,Winforms,我想查看特定文件夹中的数据库文件,我之前所做的工作如下: "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;"; 我在想,有没有一种快捷方式来查找数据库的文件,而不是编写特定的文件夹 我想到了: "Prov
"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;";
在相对路径前面添加另一个../
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=../../Assets/Database/db1.accdb; Persist Security Info=False;";
您应该避免在连接字符串中使用绝对路径,而在..中使用相对路径。。部署时很容易被破坏 您可以使用的路径| DataDirectory | db1.accdb,在WinForms中它不可用,但常数是使用应用程序域属性解析的。只需在主方法中设置基础浴:
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
简单明了。您应该避免在连接字符串中使用绝对路径,而在..中使用相对路径。。部署时很容易被破坏 您可以使用的路径| DataDirectory | db1.accdb,在WinForms中它不可用,但常数是使用应用程序域属性解析的。只需在主方法中设置基础浴:
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
简单明了。感谢为这个问题投票的人:感谢为这个问题投票的人:谢谢!你是最棒的,谢谢!你是最棒的。但是,这使得应用程序必须安装在特定的文件夹上,对吗,先生@Adriano Repetti?如果用户将文件夹更改为与设置字符串不匹配的其他内容,会发生什么情况?还有容易破碎的,先生,你指的是什么?那怎么可能呢?感谢you@UnknownUser当然,路径不应该硬编码!很容易被破坏,因为相对路径将受到工作目录的影响,如果您将RootFolder声明为Application.StartupPath,则连接字符串中的路径将始终从可执行路径根目录。此外,请注意,如果编译到root\debug\release中,您仍然可以合并,那么您的绝对路径将是| RootFolder |..\..\assets\db1.accdb。请注意,您可以定义多个常量,例如AppData目录,UAC程序文件夹可能不可写…+1,以便您清楚地解释,先生@Adriano Repetti。非常感谢,先生。显然这是一个比我更好的答案!为了其他程序员寻找类似问题的解决方案,您应该接受这个方案。@hantoun我不这么认为!接受的答案是用户发现在他的情况下有用的,如果他不需要任何更复杂的东西,那么简单地添加../就可以了,而且要短得多。将来,程序员会发现这很有用…可能会投票支持。但是,这使得应用程序必须安装在特定的文件夹上,对吗,先生@Adriano Repetti?如果用户将文件夹更改为与设置字符串不匹配的其他内容,会发生什么情况?还有容易破碎的,先生,你指的是什么?那怎么可能呢?感谢you@UnknownUser当然,路径不应该硬编码!很容易被破坏,因为相对路径将受到工作目录的影响,如果您将RootFolder声明为Application.StartupPath,则连接字符串中的路径将始终从可执行路径根目录。此外,请注意,如果编译到root\debug\release中,您仍然可以合并,那么您的绝对路径将是| RootFolder |..\..\assets\db1.accdb。请注意,您可以定义多个常量,例如AppData目录,UAC程序文件夹可能不可写…+1,以便您清楚地解释,先生@Adriano Repetti。非常感谢,先生。显然这是一个比我更好的答案!为了其他寻找s的程序员
类似问题的解决方案,你应该接受这个。@hantoun我不这么认为!接受的答案是用户发现在他的情况下有用的,如果他不需要任何更复杂的东西,那么简单地添加../就可以了,而且要短得多。在未来,程序员会发现这很有用…可能会投票支持。