首页 > 编程语言 >使用C#读写ini文件

使用C#读写ini文件

时间:2024-03-09 17:01:01浏览次数:21  
标签:string C# 读写 IniHelper private static ini iniPath public

使用C#读写ini文件要用到Windows的API函数:GetPrivateProfileString、WritePrivateProfileString,下面对该方法进行封装并以具体ini文件为例说明如何读写。

1、ini文件示例

; FTP服务器参数
[FtpServer]
IP=127.0.0.1
Port=21
UserName=user
Password=user

2、IniHelper.cs

public static class IniHelper
{
    [DllImport("kernel32", CharSet = CharSet.Unicode)]
    // ReSharper disable once UnusedMember.Local
    private static extern long WritePrivateProfileString(string section, string key, string value, string filePath);

    [DllImport("kernel32", CharSet = CharSet.Unicode)]
    private static extern int GetPrivateProfileString(string section, string key, string defaultValue,
        StringBuilder resultValue, int size, string filePath);

    public static string ReadStr(string section, string key, string defaultValue, string filePath)
    {
        var ret = new StringBuilder(255);
        GetPrivateProfileString(section, key, defaultValue, ret, ret.Capacity, filePath);
        return ret.ToString();
    }

    public static int ReadInt(string section, string key, int defaultValue, string filePath)
    {
        var text = ReadStr(section, key, $"{defaultValue}", filePath);
        return int.TryParse(text, out var intValue) ? intValue : defaultValue;
    }

    public static void WriteValue(string section, string key, string value, string filePath)
    {
        WritePrivateProfileString(section, key, value, filePath);
    }
}

3、IniConfigManager.cs

internal sealed class IniConfigManager
{
    public string FtpIp { get; private set; } //FTP服务器IP
    public int FtpPort { get; private set; } //FTP服务器端口
    public string FtpUserName { get; private set; } //FTP服务器用户名
    public string FtpPassword { get; private set; } //FTP服务器密码

    private readonly string _iniPath = Path.Combine(Application.StartupPath, "AppSettings.ini"); //ini配置文件路径
    private readonly ILog _logger = LogManager.GetLogger(nameof(IniConfigManager));

    /// <summary>
    /// 加载配置文件
    /// </summary>
    public void LoadConfig()
    {
        try
        {
            //FTP服务器参数
            FtpIp = IniHelper.ReadStr("FtpServer", "IP", "127.0.0.1", _iniPath);
            FtpPort = IniHelper.ReadInt("FtpServer", "Port", 21, _iniPath);
            FtpUserName = IniHelper.ReadStr("FtpServer", "UserName", "user", _iniPath);
            FtpPassword = IniHelper.ReadStr("FtpServer", "Password", "user", _iniPath);
        }
        catch (Exception e)
        {
            _logger.Error($@"加载ini配置文件失败:{e.Message}.");
        }
    }

    //设置STP服务器参数
    public void SetFtpConfig(string ip, int port, string userName, string password)
    {
        FtpIp = ip;
        FtpPort = port;
        FtpUserName = userName;
        FtpPassword = password;

        try
        {
            IniHelper.WriteValue("FtpServer", "IP", ip, _iniPath);
            IniHelper.WriteValue("FtpServer", "Port", $"{port}", _iniPath);
            IniHelper.WriteValue("FtpServer", "UserName", userName, _iniPath);
            IniHelper.WriteValue("FtpServer", "Password", password, _iniPath);
        }
        catch (Exception e)
        {
            _logger.Error($@"设置STP服务器参数失败:{e.Message}.");
            throw;
        }
    }

    #region 单例模式

    private static IniConfigManager _instance;

    private static readonly object LockInstanceHelper = new object();

    private IniConfigManager()
    {
    }

    public static IniConfigManager Instance
    {
        get
        {
            if (_instance != null)
            {
                return _instance;
            }

            lock (LockInstanceHelper)
            {
                _instance = _instance ?? new IniConfigManager();
            }

            return _instance;
        }
    }

    #endregion
}

标签:string,C#,读写,IniHelper,private,static,ini,iniPath,public
From: https://www.cnblogs.com/xhubobo/p/18062974

相关文章

  • Data encapsulation of HTTP, TLS, TCP and IP
    数据包封装过程 原文:TLSrecordsizehasanimportantimpactontheperformanceofHTTPS.Herewediscusstheeffectofrecordsizeondataencapsulation,asshowninFigure2.TCPisabyte-streamprotocol,whichcansplitmessagefromtheupperlayerofT......
  • C 结构体中的位域概念
    位域一、基本概念1.1位域的概念结构体中的冒号表示位域,如:structbit_struct{unsignedintbit1:10;unsignedintbit2:8;unsignedintbit3:14;}data1;//sizeofdata1=4structbit_struct{unsignedintbit1:10;unsignedintbit2:8......
  • ModbusTCP协议简介与编程流程图
      本文主要目的是为了写一个简单的ModbusTCP服务器-客户端程序而记录的知识点,里面包含了编程所需要的必要背景知识和协议解析流程图。Modbus基本数据类型  Modbus有四种基本数据类型:离散量输入:客户端只能读取它,由服务器提供,占1个比特位,可以传输现实中的开关量输入,比如接近......
  • Python基于TCP实现聊天功能
    Server端importsocketimportqueueimportthreadingimporttimeserversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host=socket.gethostname()print("服务器IP:"+socket.gethostbyname(host))serversocket.bind((host,9090))serversock......
  • macOS 移除顽固打印机信息
    问题描述当我打开ParallelsDesktop的Ubuntu虚拟机时,总是会看到打印机已添加的提示:查看已有打印机信息$lpstat-p打印机Lenovo_M7206W闲置,启用时间始于五1/623:54:092023这里可以看到打印机的名字是Lenovo_M7206W查看打印机具体信息使用lpoptions查看打印机......
  • AVCodec
    AVCodec是存储编解码信息的结构体。/***AVCodec.*/typedefstructAVCodec{/***Nameofthecodecimplementation.*Thenameisgloballyuniqueamongencodersandamongdecoders(butan*encoderandadecodercansharethesamename)......
  • CF1264D2 Beautiful Bracket Sequence (hard version) 题解
    括号深度的本质,其实就是删除若干个字符以后使得左边一半全是(,右边一半全是),最终(的个数的最大值。那么就一定存在一个位置使得在这个位置以及之前的字符中(的个数等于这个字符后)的个数。考虑枚举这个位置,记它左边的(的个数为\(a\)、?的个数为\(x\),右边的)的个数......
  • .NET性能优化交流群(.NET Performance Optimization Discussion Group)
    大家好,相信大家在开发中经常会遇到一些性能问题,苦于没有有效的工具去发现性能瓶颈,或者是发现瓶颈以后不知道该如何优化。之前一直有读者朋友询问有没有技术交流群,但是由于各种原因一直都没创建,现在很高兴的在这里宣布,我创建了一个专门交流.NET性能优化经验的群组,主题包括但不限于:......
  • Collections
    一个操作集合的工具类setAll:批量添加数据shuffle:打乱List集合数据sort:对list集合进行排序......
  • 多节点oceanbase 集群部署
    安装前准备硬件要求CPU最少2核磁盘最少19G文件系统EXT4戓XFS关闭透明大页echonever>/sys/kernel/mm/redhat_transparent_hugepage/enabled确认操作系统版本是否支持[root@innodb-cluster01~]#cat/etc/redhat-releaseRedHatEnterpriseLinuxServerrelease7.9......