1 #Region "Microsoft.VisualBasic::d126a3f20b2b54a2ba888922064440ca, Microsoft.VisualBasic.Core\ComponentModel\Settings\Inf\IniFile.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Class IniFile
35     
36     '         Properties: path
37     
38     '         Constructor: (+1 OverloadsSub New
39     
40     '         FunctionGetPrivateProfileString, ReadValue, ToString, WritePrivateProfileString
41     
42     '         Sub: WriteValue
43     
44     
45     ' /********************************************************************************/
46
47 #End Region
48
49 Imports System.Runtime.CompilerServices
50 Imports System.Runtime.InteropServices
51 Imports System.Text
52 Imports Microsoft.VisualBasic.Language.UnixBash.FileSystem
53 Imports Microsoft.VisualBasic.Win32
54
55 Namespace ComponentModel.Settings.Inf
56
57     ''' <summary>
58     ''' Ini file I/O handler
59     ''' </summary>
60     Public Class IniFile
61
62         Public ReadOnly Property path As String
63
64         ''' <summary>
65         ''' Write a string value into a specific section in a specifc ini profile.(在初始化文件指定小节内设置一个字串)
66         ''' </summary>
67         ''' <param name="section">
68         ''' <see cref="String"/>,要在其中写入新字串的小节名称。这个字串不区分大小写
69         ''' </param>
70         ''' <param name="key">
71         ''' <see cref="String"/>,要设置的项名或条目名。这个字串不区分大小写。
72         ''' 用<see cref="vbNullString"/>可删除这个小节的所有设置项
73         ''' </param>
74         ''' <param name="val">
75         ''' <see cref="String"/>,指定为这个项写入的字串值。用<see cref="vbNullString"/>表示删除这个项现有的字串
76         ''' </param>
77         ''' <param name="filePath">
78         ''' <see cref="String"/>,初始化文件的名字。如果没有指定完整路径名,则windows会在windows目录查找文件。
79         ''' 如果文件没有找到,则函数会创建它</param>
80         ''' <returns>Long,非零表示成功,零表示失败。会设置<see cref="GetLastErrorAPI.GetLastError()"/></returns>
81         <DllImport("kernel32")>
82         Public Shared Function WritePrivateProfileString(section As String,
83                                                          key As String,
84                                                          val As String,
85                                                          filePath As StringAs Long
86         End Function
87
88         ''' <summary>
89         ''' 为初始化文件中指定的条目取得字串
90         ''' </summary>
91         ''' <param name="section">
92         ''' String,欲在其中查找条目的小节名称。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString
93         ''' 缓冲区内装载这个ini文件所有小节的列表。
94         ''' </param>
95         ''' <param name="key">
96         ''' String,欲获取的项名或条目名。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString
97         ''' 缓冲区内装载指定小节所有项的列表
98         ''' </param>
99         ''' <param name="def">String,指定的条目没有找到时返回的默认值。可设为空("")</param>
100         ''' <param name="retVal">String,指定一个字串缓冲区,长度至少为nSize</param>
101         ''' <param name="size">Long,指定装载到lpReturnedString缓冲区的最大字符数量</param>
102         ''' <param name="filePath">
103         ''' String,初始化文件的名字。如没有指定一个完整路径名,windows就在Windows目录中查找文件
104         ''' </param>
105         ''' <returns>
106         ''' Long,复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中止字符。如lpReturnedString
107         ''' 缓冲区不够大,不能容下全部信息,就返回nSize-1(若lpApplicationName或lpKeyName为NULL,则返回nSize-2)
108         ''' </returns>
109         <DllImport("kernel32")>
110         Public Shared Function GetPrivateProfileString(section As String,
111                                                        key As String,
112                                                        def As String,
113                                                        retVal As StringBuilder,
114                                                        size As Integer,
115                                                        filePath As StringAs Integer
116         End Function
117
118         ''' <summary>
119         ''' Open a ini file handle.
120         ''' </summary>
121         ''' <param name="INIPath"></param>
122         Public Sub New(INIPath As String)
123             path = IO.Path.GetFullPath(PathMapper.GetMapPath(INIPath))
124         End Sub
125
126         Public Overrides Function ToString() As String
127             Return path.ToFileURL
128         End Function
129
130         <MethodImpl(MethodImplOptions.AggressiveInlining)>
131         Public Sub WriteValue(Section As String, Key As String, Value As String)
132             Call WritePrivateProfileString(Section, Key, Value, Me.path)
133         End Sub
134
135         Public Function ReadValue(Section As String, Key As StringAs String
136             Dim temp As New StringBuilder(255)
137             Dim i As Integer = GetPrivateProfileString(Section, Key, "", temp, 255, Me.path)
138             Return temp.ToString()
139         End Function
140     End Class
141 End Namespace