Utils/IniUtils.cs

(开头部分) 4KB

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

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

namespace AppManager.Utils {
    internal static class IniUtils {


        //类的构造函数,传递INI文件名  
        public static long IniWriteValue(string iniPath, string section, string key, string value) {
            // 如果文件不存在,创建文件
            FileUtils.CreateDirectory(Path.GetDirectoryName(iniPath));
            return DllUtils.WritePrivateProfileString(section, key, value, Configs.AppPath + 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, Configs.AppPath + iniPath);
            var result = Encoding.Default.GetString(buffer, 0, (int)len);
            return result;
        }
        // 封装的方法中,最有价值的是获取所有Sections和所有的Keys,网上关于这个的代码大部分是错误的,这里给出一个正确的方法:  
        /// 返回该配置文件中所有Section名称的集合  
        public static IEnumerable<string> ReadSections(string iniPath) {
            var buffer = new byte[65535];
            var len = DllUtils.GetPrivateProfileStringA(null, null, null, buffer, buffer.Length, Configs.AppPath + 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;
            }
            list.Sort(delegate (string section1, string section2) {
                // 按组排序,有组的排前面
                // var group1 = IniReadValue(Configs.ProjectsIniPath, section1, Configs.IniKeyAppGroup);
                // var group2 = IniReadValue(Configs.ProjectsIniPath, section2, Configs.IniKeyAppGroup);
                // if (!string.IsNullOrEmpty(group1) && !string.IsNullOrEmpty(group2)) {
                //     return string.CompareOrdinal(group1, group2);
                // }
                // if (!string.IsNullOrEmpty(group1)) {
                //     return -1;
                // }
                // if (!string.IsNullOrEmpty(group2)) {
                //     return 1;
                // }
                // 当group都为空时,用排序字段
                var sort1 = IniReadValue(Configs.ProjectsIniPath, section1, Configs.IniKeyAppSort);
                var sort2 = IniReadValue(Configs.ProjectsIniPath, section2, Configs.IniKeyAppSort);
                if (!string.IsNullOrEmpty(sort1) && !string.IsNullOrEmpty(sort2)) {
                    return Convert.ToInt16(sort1).CompareTo(Convert.ToInt16(sort2));
                }
                if (string.IsNullOrEmpty(sort1)) {
                    return 1;
                }
                return -1;
            });
后面还有 45 行代码,解锁后查看完整代码

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

AI 解读 AI

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

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