ini文件读写
读写INI文件
在C#中,读写INI文件通常会使用Windows API中的kernel32.dll
中的函数。这些函数包括GetPrivateProfileString
、WritePrivateProfileString
等。通过P/Invoke调用这些函数,可以方便地读写INI文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| using System.Runtime.InteropServices; using System.Text;
public static class INIFileHelper { private static string filePath = "INI文件路径";
#region 导入动态链接库中的方法 [DllImport("kernel32.dll")] private static extern int GetPrivateProfileString( string section, string key, string defaultValue, StringBuilder returnValue, int size, string filePath);
[DllImport("kernel32.dll")] private static extern long WritePrivateProfileString( string section, string key, string value, string filePath); #endregion
public static string ReadINIFile(string section, string key) { StringBuilder sb = new StringBuilder(1024); GetPrivateProfileString(section, key, "", sb, 1024, filePath); return sb.ToString(); } public static void WriteINIFile(string section, string key, string value) { WritePrivateProfileString(section, key, value, filePath); } }
|
概念解释
INI文件
INI文件是一种用于配置文件的简单、常用格式,是Initialization File的缩写。
INI文件结构: INI文件通常包含节(sections)和键值对(key-value pairs)。
节(sections): 部分用于对配置进行逻辑分组。部分的名称放在方括号中。一个INI文件可以包含多个部分。
键值对(key-value pairs): 每个部分包含一个或多个键值对,键和值之间用等号(=
)分隔。键和值都是字符串。
下面是一个简单的INI文件示例:
1 2 3 4 5 6
| [General] AppName=MyApp Version=1.0.0
[Settings] EnableFeatureX=True
|
动态链接库
动态链接库(Dynamic Link Library,DLL)是一种包含可以被多个程序同时使用的代码和数据的文件。DLL 文件允许程序模块化,这意味着功能可以被分割到独立的 DLL 文件中。通过这种方式,不同的程序可以共享同一个 DLL 文件中的代码和资源,而无需重复代码。
以.dll
为后缀名的文件通常是动态链接库,也可能是.NET程序集、插件、驱动程序或资源文件。
P/Invoke
P/Invoke(Platform Invocation Services)是.NET中的一个功能,允许托管代码(如C#)调用非托管代码(如Windows API函数、C/C++库函数)。通过P/Invoke,可以在C#程序中使用操作系统提供的功能或其他非托管库中的功能。
托管代码:由CLR管理的代码,如C#、VB.NET代码。
非托管代码:不由CLR管理的代码,如C/C++编写的库函数。
P/Invoke:一种机制,允许托管代码调用非托管代码。
要使用P/Invoke调用非托管函数,需要使用[DllImport]
属性,该属性在System.Runtime.InteropServices
命名空间中定义。通过该属性,可以指定要调用的非托管DLL及其函数。
App.config文件读写
下面代码仅对appSetting
与connectionStrings
两个元素进行了增删改查封装,如果需要其他,可参照封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| using System.Configuration;
public static class AppConfigHelper { static Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); public static void AddOrUpdateAppSetting(string key, string value) { var settings = config.AppSettings.Settings; if (settings[key] == null) { settings.Add(key, value); } else { settings[key].Value = value; } config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); } public static void RemoveAppSetting(string key) { var settings = config.AppSettings.Settings; if (settings[key] != null) { settings.Remove(key); config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); } } public static void Modify(string key, string value) { config.AppSettings.Settings[key].Value = value; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); } public static string GetAppSetting(string key) { var settings = config.AppSettings.Settings; return settings[key]?.Value; }
public static void AddOrUpdateConnectionString(string name, string connectionsString, string providerName = "") { var connectionStrings = config.ConnectionStrings.ConnectionStrings; if (connectionStrings[name] == null) { var connStrSetting = new ConnectionStringSettings(name, connectionsString, providerName); connectionStrings.Add(connStrSetting); } else { connectionStrings[name].ConnectionString = connectionsString; connectionStrings[name].ProviderName = providerName; } config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection(config.ConnectionStrings.SectionInformation.Name); } public static void RemoveConnectionString(string name) { var connectionStrings = config.ConnectionStrings.ConnectionStrings; if (connectionStrings[name] != null) { connectionStrings.Remove(name); config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection(config.ConnectionStrings.SectionInformation.Name); } }
public static string GetConnectionString(string name) { var connectionStrings = config.ConnectionStrings.ConnectionStrings; return connectionStrings[name]?.ConnectionString; } }
|
参考内容
参考内容
Microsoft Learn System.Configuration.ConfigurationManager
ChatGPT