把下面的代码保存为INI.asp即可运行:
标签:缓存,End,NodeName,Content,GroupName,代替,ini,TempGroup,Public From: https://blog.51cto.com/u_627724/5951186
1 < %
2 ' Power By Tim
3 ' 文件摘要:INI类
4 ' 文件版本:3.0
5 ' 文本创建日期:2:17 2004-12-14
6 ' ================= 属性说明 ================
7 ' INI.OpenFile = 文件路径(使用虚拟路径需在外部定义)
8 ' INI.CodeSet = 编码设置,默认为 GB2312
9 ' INI.IsTrue = 检测文件是否正常(存在)
10 ' ================ 方法说明 =================
11 ' IsGroup(组名) 检测组是否存在
12 ' IsNode(组名,节点名) 检测节点是否存在
13 ' GetGroup(组名) 读取组信息
14 ' CountGroup() 统计组数量
15 ' ReadNode(组名,节点名) 读取节点数据
16 ' WriteGroup(组名) 创建组
17 ' WriteNode(组,节点,节点数据) 插入/更新节点数据
18 ' DeleteGroup(组名) 删除组
19 ' DeleteNode(组名,节点名) 删除节点
20 ' Save() 保存文件
21 ' Close() 清除内部数据(释放)
22 ' ===============================================
23
24
25
26 Class INI_Class
27 ' ===============================================
28 Private Stream ' // Stream 对象
29 Private FilePath ' // 文件路径
30 Public Content ' // 文件数据
31 Public IsTrue ' // 文件是否存在
32 Public IsAnsi ' // 记录是否二进制
33 Public CodeSet ' // 数据编码
34 ' ================================================
35
36 ' // 初始化
37 Private Sub Class_Initialize()
38 Set Stream = Server. CreateObject ( " ADODB.Stream " )
39 Stream.Mode = 3
40 Stream.Type = 2
41 CodeSet = " gb2312"
42 IsAnsi = True
43 IsTrue = True
44 End Sub
45
46
47 ' // 二进制流转换为字符串
48 Private Function Bytes2bStr(bStr)
49 if Lenb(bStr) = 0 Then
50 Bytes2bStr = " "
51 Exit Function
52 End if
53
54 Dim BytesStream,StringReturn
55 Set BytesStream = Server. CreateObject ( " ADODB.Stream " )
56 With BytesStream
57 .Type = 2
58 .Open
59 .WriteText bStr
60 .Position = 0
61 .Charset = CodeSet
62 .Position = 2
63 StringReturn = .ReadText
64 .Close
65 End With
66 Bytes2bStr = StringReturn
67 Set BytesStream = Nothing
68 Set StringReturn = Nothing
69 End Function
70
71
72 ' // 设置文件路径
73 Property Let OpenFile(INIFilePath)
74 FilePath = INIFilePath
75 Stream.Open
76 On Error Resume Next
77 Stream.LoadFromFile(FilePath)
78 ' // 文件不存在时返回给 IsTrue
79 if Err.Number <> 0 Then
80 IsTrue = False
81 Err.Clear
82 End if
83 Content = Stream.ReadText(Stream.Size)
84 if Not IsAnsi Then Content = Bytes2bStr(Content)
85 End Property
86
87
88 ' // 检测组是否存在[参数:组名]
89 Public Function IsGroup(GroupName)
90 if Instr (Content, " [ " & GroupName & " ] " ) > 0 Then
91 IsGroup = True
92 Else
93 IsGroup = False
94 End if
95 End Function
96
97
98 ' // 读取组信息[参数:组名]
99 Public Function GetGroup(GroupName)
100 Dim TempGroup
101 if Not IsGroup(GroupName) Then Exit Function
102 ' // 开始寻找头部截取
103 TempGroup = Mid (Content, Instr (Content, " [ " & GroupName & " ] " ), Len (Content))
104 ' // 剔除尾部
105 if Instr (TempGroup,VbCrlf & " [ " ) > 0 Then TempGroup = Left (TempGroup, Instr (TempGroup,VbCrlf & " [ " ) - 1 )
106 if Right (TempGroup, 1 ) <> Chr ( 10 ) Then TempGroup = TempGroup & VbCrlf
107 GetGroup = TempGroup
108 End Function
109
110
111 ' // 检测节点是否存在[参数:组名,节点名]
112 Public Function IsNode(GroupName,NodeName)
113 if Instr (GetGroup(GroupName),NodeName & " = " ) Then
114 IsNode = True
115 Else
116 IsNode = False
117 End if
118 End Function
119
120
121 ' // 创建组[参数:组名]
122 Public Sub WriteGroup(GroupName)
123 if Not IsGroup(GroupName) And GroupName <> "" Then
124 Content = Content & " [ " & GroupName & " ] " & VbCrlf
125 End if
126 End Sub
127
128
129 ' // 读取节点数据[参数:组名,节点名]
130 Public Function ReadNode(GroupName,NodeName)
131 if Not IsNode(GroupName,NodeName) Then Exit Function
132 Dim TempContent
133 ' // 取组信息
134 TempContent = GetGroup(GroupName)
135 ' // 取当前节点数据
136 TempContent = Right (TempContent, Len (TempContent) - Instr (TempContent,NodeName & " = " ) + 1 )
137 TempContent = Replace ( Left (TempContent, Instr (TempContent,VbCrlf) - 1 ),NodeName & " = " , "" )
138 ReadNode = ReplaceData(TempContent, 0 )
139 End Function
140
141
142 ' // 写入节点数据[参数:组名,节点名,节点数据]
143 Public Sub WriteNode(GroupName,NodeName,NodeData)
144 ' // 组不存在时写入组
145 if Not IsGroup(GroupName) Then WriteGroup(GroupName)
146
147 ' // 寻找位置插入数据
148 ' /// 获取组
149 Dim TempGroup : TempGroup = GetGroup(GroupName)
150
151 ' /// 在组尾部追加
152 Dim NewGroup
153 if IsNode(GroupName,NodeName) Then
154 NewGroup = Replace (TempGroup,NodeName & " = " & ReplaceData(ReadNode(GroupName,NodeName), 1 ),NodeName & " = " & ReplaceData(NodeData, 1 ))
155 Else
156 NewGroup = TempGroup & NodeName & " = " & ReplaceData(NodeData, 1 ) & VbCrlf
157 End if
158
159 Content = Replace (Content,TempGroup,NewGroup)
160 End Sub
161
162
163 ' // 删除组[参数:组名]
164 Public Sub DeleteGroup(GroupName)
165 Content = Replace (Content,GetGroup(GroupName), "" )
166 End Sub
167
168
169 ' // 删除节点[参数:组名,节点名]
170 Public Sub DeleteNode(GroupName,NodeName)
171 Dim TempGroup
172 Dim NewGroup
173 TempGroup = GetGroup(GroupName)
174 NewGroup = Replace (TempGroup,NodeName & " = " & ReadNode(GroupName,NodeName) & VbCrlf, "" )
175 if Right (NewGroup, 1 ) <> Chr ( 10 ) Then NewGroup = NewGroup & VbCrlf
176 Content = Replace (Content,TempGroup,NewGroup)
177 End Sub
178
179
180 ' // 替换字符[实参:替换目标,数据流向方向]
181 ' 字符转换[防止关键符号出错]
182 ' [ ---> {(@)}
183 ' ] ---> {(#)}
184 ' = ---> {($)}
185 ' 回车 ---> {(1310)}
186 Public Function ReplaceData(Data_Str,IsIn)
187 if IsIn Then
188 ReplaceData = Replace ( Replace ( Replace (Data_Str, " [ " , " {(@)} " ), " ] " , " {(#)} " ), " = " , " {($)} " )
189 ReplaceData = Replace (ReplaceData, Chr ( 13 ) & Chr ( 10 ), " {(1310)} " )
190 Else
191 ReplaceData = Replace ( Replace ( Replace (Data_Str, " {(@)} " , " [ " ), " {(#)} " , " ] " ), " {($)} " , " = " )
192 ReplaceData = Replace (ReplaceData, " {(1310)} " , Chr ( 13 ) & Chr ( 10 ))
193 End if
194 End Function
195
196
197 ' // 保存文件数据
198 Public Sub Save()
199 With Stream
200 .Close
201 .Open
202 .WriteText Content
203 .SaveToFile FilePath, 2
204 End With
205 End Sub
206
207
208 ' // 关闭、释放
209 Public Sub Close()
210 Set Stream = Nothing
211 Set Content = Nothing
212 End Sub
213
214 End Class
215
216
217 Dim INI
218 Set INI = New INI_Class
219 INI.OpenFile = Server.MapPath( " Config.ini " )
220 ' ========== 这是写入ini数据 ==========
221 Call INI.WriteNode( " SiteConfig " , " SiteName " , " Leadbbs极速论坛 " )
222 Call INI.WriteNode( " SiteConfig " , " Mail " , " [email protected] " )
223 INI.Save()
224 ' ========== 这是读取ini数据 ==========
225 Response.Write( " 站点名称: " & INI.ReadNode( " SiteConfig " , " SiteName " ))
226 % >