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 算力,解读结果公开显示在下面。
还没有人解读过这个文件。