我可以将Ini文件存储在资源文件中吗?

问题描述 投票:0回答:1

我有一个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"];
}
c# winforms ini
1个回答
0
投票

我终于可以使用@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) 。

© www.soinside.com 2019 - 2024. All rights reserved.