我有一个Windows Forms应用程序.Net Framework 4.6.1,我想在Ini文件中存储一些数据库连接数据。
然后,我想将其作为普通文件存储在项目的Resources文件中(因此,我不必手动将文件复制/粘贴到Debug and Release文件夹等中),但是当我尝试编译时程序并使用ini-parser读取Ini数据,出现以下异常:System.ArgumentException: 'Invalid characters in path access'
。
我正在使用Properties.Resources
读取Ini文件,因此我猜想路径不会有问题。 Ini文件本身可能有问题吗?
Ini文件的内容如下:
[Db]
host = (anIP)
port = (aPort)
db = (aDbName)
user = (aDbUser)
password = (aDbUserPwd)
以及我读取数据的方法:
public static void ParseIniData()
{
var parser = new FileIniDataParser();
IniData data = parser.ReadFile(Properties.Resources.dbc);
mysqlHost = data["Db"]["host"];
mysqlPort = data["Db"]["port"];
mysqlDb = data["Db"]["db"];
mysqlUser = data["Db"]["user"];
mysqlPwd = data["Db"]["password"];
}
我终于可以使用@KlausGütter在评论中告诉我的内容了(谢谢!)。
代替使用FileIniDataParser
,您必须使用StreamIniDataParser
,并使用Assembly.GetManifestResourceStream
获得流。
我发现这有点棘手,因为使用此方法需要将要读取的文件中的Build Action
设置为Embedded Resource
。然后,此文件在编译时作为嵌入式资源添加,您可以检索其流。
所以我的方法以下列方式结束:
public static void ParseIniData()
{
var parser = new StreamIniDataParser();
dbcReader = new StreamReader(_Assembly.GetManifestResourceStream("NewsEditor.Resources.dbc.ini"));
IniData data = parser.ReadData(dbcReader);
mysqlHost = data["Db"]["host"];
mysqlPort = data["Db"]["port"];
mysqlDb = data["Db"]["db"];
mysqlUser = data["Db"]["user"];
mysqlPwd = data["Db"]["password"];
}
其中_Assembly
是私有静态属性:private static Assembly _Assembly = Assembly.GetExecutingAssembly();
。这使您获得在运行代码时正在执行的程序集(您也可以直接在方法中使用此代码,但是我在类中的另一个方法上使用了程序集,因此我决定设置一个属性……我猜是DRY) 。