Utils/IniUtils.cs

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System.Collections.Generic;
using System.IO;
using System.Text;

namespace XStart.Utils {
    public static class IniUtils {


        //类的构造函数,传递INI文件名  
        public static long IniWriteValue(string iniPath, string section, string key, string value) {
            // 如果文件不存在,创建文件
            string directoryPath = Path.GetDirectoryName(iniPath);
            if (!Directory.Exists(directoryPath)) {
                Directory.CreateDirectory(directoryPath);
            }
            return DllUtils.WritePrivateProfileString(section, key, value, iniPath);
        }

        //读取section中某个值  
        public static string IniReadValue(string iniPath, string section, string key) {
            var buffer = new byte[256];
            var len = DllUtils.GetPrivateProfileStringA(section, key, string.Empty, buffer, 256, iniPath);
            var result = Encoding.Default.GetString(buffer, 0, (int)len);
            return result;
        }
        // 封装的方法中,最有价值的是获取所有Sections和所有的Keys,网上关于这个的代码大部分是错误的,这里给出一个正确的方法:  
        /// 返回该配置文件中所有Section名称的集合  
        public static List<string> ReadSections(string iniPath) {
            var buffer = new byte[65535];
            var len = DllUtils.GetPrivateProfileStringA(null, null, null, buffer, buffer.Length, iniPath);
            var j = 0;
            var list = new List<string>();
            for (var i = 0; i < len; i++) {
                if (buffer[i] != 0) continue;
                list.Add(Encoding.Default.GetString(buffer, j, i - j));
                j = i + 1;
            }
            return list;
        }

        // 获取节点的所有KEY值  

        public static List<string> ReadKeys(string iniPath, string sectionName) {

            var buffer = new byte[5120];
            var rel = DllUtils.GetPrivateProfileStringA(sectionName, null, string.Empty, buffer, buffer.GetUpperBound(0), iniPath);

            var list = new List<string>();
            if (rel <= 0) return list;
            var iPos = 0;
            int iCnt;
            for (iCnt = 0; iCnt < rel; iCnt++) {
                if (buffer[iCnt] != 0x00) continue;
                var tmp = Encoding.Default.GetString(buffer, iPos, iCnt - iPos).Trim();
                iPos = iCnt + 1;
                if (!string.IsNullOrEmpty(tmp)) {
                    list.Add(tmp);
                }
            }
            return list;
后面还有 22 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。