chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
 
namespace UtilLib
{
    public class IniHelper
    {
        #region API函数声明
 
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key,
            string val, string filePath);
 
        //需要调用GetPrivateProfileString的重载
        [DllImport("kernel32", EntryPoint = "GetPrivateProfileString")]
        private static extern long GetPrivateProfileString(string section, string key,
            string def, StringBuilder retVal, int size, string filePath);
 
        [DllImport("kernel32", EntryPoint = "GetPrivateProfileString")]
        private static extern uint GetPrivateProfileStringA(string section, string key,
            string def, Byte[] retVal, int size, string filePath);
 
 
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileSection(string section, byte[] retVal, int size, string filePath);
 
        #endregion
 
        /// <summary>
        /// 获取某个section下的所有key和value
        /// </summary>
        /// <param name="iniFile"></param>
        /// <param name="section"></param>
        /// <returns></returns>
        public static Dictionary<string, string> GetKeyValuesBySection(string iniFile, string section)
        {
            int size = 65536;
            byte[] buffer = new byte[size];
 
            Dictionary<string, string> result = new Dictionary<string, string>();
            int bytesRead = GetPrivateProfileSection(section, buffer, size, iniFile);
            if (bytesRead > 0)
            {
                string sectionData = Encoding.Default.GetString(buffer, 0, bytesRead - 1);
                string[] keyValuePairs = sectionData.Split('\0');
 
                foreach (string pair in keyValuePairs)
                {
                    if (!string.IsNullOrEmpty(pair))
                    {
                        int equalSignIndex = pair.IndexOf('=');
                        if (equalSignIndex > 0)
                        {
                            string key = pair.Substring(0, equalSignIndex).Trim();
                            string value = pair.Substring(equalSignIndex + 1).Trim();
                            result[key] = value;
                        }
                    }
                }
            }
            return result;
        }
 
        public static List<string> ReadListBySection(string iniFile, string section)
        {
            int size = 65536;
            byte[] buffer = new byte[size];
            List<string> result = new List<string>();
            int bytesRead = GetPrivateProfileSection(section, buffer, size, iniFile);
            if (bytesRead > 0)
            {
                string sectionData = Encoding.Default.GetString(buffer, 0, bytesRead - 1);
                string[] keyValuePairs = sectionData.Split('\0');
 
                foreach (string pair in keyValuePairs)
                {
                    if (!string.IsNullOrEmpty(pair))
                    {
                        result.Add(pair);
                    }
                }
            }
            return result;
        }
 
        public static List<string> ReadSections(string iniFilename)
        {
            List<string> result = new List<string>();
            Byte[] buf = new Byte[65536];
            uint len = GetPrivateProfileStringA(null, null, null, buf, buf.Length, iniFilename);
            int j = 0;
            for (int i = 0; i < len; i++)
            {
                if (buf[i] == 0)
                {
                    result.Add(Encoding.Default.GetString(buf, j, i - j));
                    j = i + 1;
                }
            }
            return result;
        }
 
        public static List<string> ReadKeys(string SectionName, string iniFilename)
        {
            List<string> result = new List<string>();
            Byte[] buf = new Byte[65536];
            uint len = GetPrivateProfileStringA(SectionName, null, null, buf, buf.Length, iniFilename);
            int j = 0;
            for (int i = 0; i < len; i++)
            {
                if (buf[i] == 0)
                {
                    result.Add(Encoding.Default.GetString(buf, j, i - j));
                    j = i + 1;
                }
            }
            return result;
        }
 
        public static string ReadIniData(string Section, string Key, string NoText, string iniFilePath)
        {
            if (File.Exists(iniFilePath))
            {
                StringBuilder temp = new StringBuilder(1024);
                GetPrivateProfileString(Section, Key, NoText, temp, 1024, iniFilePath);
                return temp.ToString();
            }
            else
                return NoText;
        }
 
        public static bool WriteIniData(string Section, string Key, string Value, string iniFilePath)
        {
            if (File.Exists(iniFilePath) == false)
            {
                FileStream FS = new FileStream(iniFilePath, FileMode.CreateNew);
            }
            long OpStation = WritePrivateProfileString(Section, Key, Value, iniFilePath);
            if (OpStation == 0)
                return false;
            else
                return true;
        }
    }
}