Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/71: Рейтинг темы: голосов - 71, средняя оценка - 4.83
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
.NET 2.x

Как сохранять настройки в .ini файл?

04.10.2013, 15:17. Показов 15231. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток... Как сделать сохранение определенных настроек (допустим положение формы, ее размер и т.п)? И при запуске программы читать эти настройки...

Пробовал найти похожие темы через поиск но что то результат меня не обрадовал )... За ранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.10.2013, 15:17
Ответы с готовыми решениями:

Как сохранить настройки программы в ini файл
Надо сохранить пути к DLL у listbox сохранить выбранный процесс combobox и т.д или сразу всё... И потом при открытии прочитать ini

Какие настройки и в каких случаях следует сохранять в *.ini файлы, а какие в реестр?
Доброго времени суток! вопрос кроется в названии темы. Помоготе разобраться, какие настройки и в каких случаях следует сохранять в *.ini...

Сохранение в ini файл настройки
Создаю форму 2 на неё кидаю чекбоксы допустим чек бокс 1 если стоит то форма прозрачная если не стоит то форма не прозрачная. Помогите...

49
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,027
Записей в блоге: 1
06.07.2023, 23:20
Студворк — интернет-сервис помощи студентам
Michail_07, насчет API. У GetPrivateProfileString неверная сигнатура по моему. Попробуйте такую
VB.NET
1
2
3
4
5
6
Private Shared Function GetPrivateProfileString(ByVal lpAppName As String, _
                            ByVal lpKeyName As String, _
                            ByVal lpDefault As String, _
                            ByVal lpReturnedString As StringBuilder, _
                            ByVal nSize As Integer, _
                            ByVal lpFileName As String) As Integer
Для lpReturnedString нужно создать StringBuilder фиксированного размера и передавать этот размер в аргумент nSize. Примерно так:
VB.NET
1
2
Dim sbResult As New StringBuilder(100)
GetPrivateProfileString("", "", "", sbResult, sbResult.Capacity, "")
1
0 / 0 / 0
Регистрация: 01.07.2023
Сообщений: 4
07.07.2023, 00:33
Private Shared Function я думаю что тут все и закончится. Там именно публичный\глобальный класс. А так, тот вызов из, и по методу VB60, Всё хорошо работает.

Добавлено через 7 минут
Я извиняюсь. Просто когда учился в институте, мне было дико, как можно программировать без компьютера... Мда.... С 2000 года до 2006-го я программировал на листочках... без компьютера... И вот теперь, даже не зная языка, я могу оценить работоспособность, но не могу задать правильность....

Добавлено через 29 минут
Что интересно, оно так и работает. НО до того момента когда идет переопределение на закрытый класс... и вот там начинаются проблемы Маршалинга, попытки чтения юниикода, хотя явно указано что читаем ANSI...

Добавлено через 28 минут
Вот функция, которая разбирает то что возвращает API,

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Public Function GetINI(ByRef sSection As String, ByRef sKey As String, ByRef sDefault As String, ByRef bMsqErr As Boolean) As String
 
 
        Dim sTemp As String '??????????????256
        Dim nLenght As Short
 
        gnErrorCode = 0
        sTemp = Space(256)
        nLenght = NativeMethods.GetPrivateProfileString(sSection, sKey, sDefault, sTemp, 255, sFileName)
        If bMsqErr = True And Left(sTemp, nLenght) = "" Then
            Console.WriteLine("Ошибка. Не найден параметр """ & sKey & """ или его значение в секции """ & sSection & """." & vbCrLf & "Файл конфигурации " & sFileName, "Чтение файла конфигурации")
            gnErrorCode = 1
        End If
        GetINI = Left(sTemp, nLenght)
    End Function
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
07.07.2023, 05:59
Цитата Сообщение от Michail_07 Посмотреть сообщение
НО до того момента когда идет переопределение на закрытый класс... и вот там начинаются проблемы Маршалинга, попытки чтения юниикода, хотя явно указано что читаем ANSI...
Потому что строки в VB.NET — это юникодные строки.
Вы можете сразу читать юникод из ini‐файла, если будете использовать юникодную версию GetPrivateProfileString — GetPrivateProfileStringW.
Ну и ещё этот ini‐файл должен быть сохранён в кодировке UTF-16 LE.
1
07.07.2023, 06:29

Не по теме:

Michail_07, если не стоит задача совместимости со старым софтом (вы ему пишете в ini, а он оттуда читает и наоборот), то переходите на xml, json или yaml.

0
0 / 0 / 0
Регистрация: 01.07.2023
Сообщений: 4
07.07.2023, 08:34
Задача стоит: поддержать существующую реализацию. Изменение INI файлов в юникод и изменение алгоритмов обработки на VB.NET текущих программ не стоит. Проще просто переписать программы на другом языке. Но это опять время для понимания того что хотел разработчик и заказчик.
0
84 / 80 / 6
Регистрация: 11.04.2021
Сообщений: 318
Записей в блоге: 7
10.07.2023, 19:03
Есть готовые решения. Gooooooooogle поиск не забываем

Кликните здесь для просмотра всего текста
VB.NET
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
'Date: 08\23\2010 - Ludvik Jerabek - Initial Release
'Version: 1.0
'Comment: Allow INI manipulation in .NET
'License: MIT
'
'Revisions:
'
'08\23\2010 - Ludvik Jerabek - Initial Release
'11\12\2010 - Ludvik Jerabek - Fixed section regex matching on key values with brackets
'06\20\2015 - Ludvik Jerabek - Fixed key parsing regex to account for keys with spaces in names
'05\06\2021 - Ludvik Jerabek - Fixed section regex to read everything within brakets and trim
'
'**DISCLAIMER**
'THIS MATERIAL IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
'EITHER EXPRESS OR IMPLIED, INCLUDING, BUT Not LIMITED TO, THE
'IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
'PURPOSE, OR NON-INFRINGEMENT. SOME JURISDICTIONS DO NOT ALLOW THE
'EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT
'APPLY TO YOU. IN NO EVENT WILL I BE LIABLE TO ANY PARTY FOR ANY
'DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY
'USE OF THIS MATERIAL INCLUDING, WITHOUT LIMITATION, ANY LOST
'PROFITS, BUSINESS INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON
'YOUR INFORMATION HANDLING SYSTEM OR OTHERWISE, EVEN If WE ARE
'EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Collections
Imports System.Diagnostics
 
' IniFile class used to read and write ini files by loading the file into memory
Public Class IniFile
    ' List of IniSection objects keeps track of all the sections in the INI file
    Private m_sections As Hashtable
 
    ' Public constructor
    Public Sub New()
        m_sections = New Hashtable(StringComparer.InvariantCultureIgnoreCase)
    End Sub
 
    ' Loads the Reads the data in the ini file into the IniFile object
    Public Sub Load(ByVal sFileName As String, Optional ByVal bMerge As Boolean = False)
        If Not bMerge Then
            RemoveAllSections()
        End If
        '  Clear the object... 
        Dim tempsection As IniSection = Nothing
        Dim oReader As New StreamReader(sFileName)
        Dim regexcomment As New Regex("^([\s]*#.*)", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
        Dim regexsection As New Regex("^[\s]*\[\s*(.*)\][\s]*$", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
        Dim regexkey As New Regex("^\s*([^=]*[^\s=])\s*=(.*)", (RegexOptions.Singleline Or RegexOptions.IgnoreCase))
        While Not oReader.EndOfStream
            Dim line As String = oReader.ReadLine()
            If line <> String.Empty Then
                Dim m As Match = Nothing
                If regexcomment.Match(line).Success Then
                    m = regexcomment.Match(line)
                    Trace.WriteLine(String.Format("Skipping Comment: {0}", m.Groups(0).Value))
                ElseIf regexsection.Match(line).Success Then
                    m = regexsection.Match(line)
                    Trace.WriteLine(String.Format("Adding section [{0}]", m.Groups(1).Value.Trim()))
                    tempsection = AddSection(m.Groups(1).Value.Trim())
                ElseIf regexkey.Match(line).Success AndAlso tempsection IsNot Nothing Then
                    m = regexkey.Match(line)
                    Trace.WriteLine(String.Format("Adding Key [{0}]=[{1}]", m.Groups(1).Value, m.Groups(2).Value))
                    tempsection.AddKey(m.Groups(1).Value).Value = m.Groups(2).Value
                ElseIf tempsection IsNot Nothing Then
                    '  Handle Key without value
                    Trace.WriteLine(String.Format("Adding Key [{0}]", line))
                    tempsection.AddKey(line)
                Else
                    '  This should not occur unless the tempsection is not created yet...
                    Trace.WriteLine(String.Format("Skipping unknown type of data: {0}", line))
                End If
            End If
        End While
        oReader.Close()
    End Sub
 
    ' Used to save the data back to the file or your choice
    Public Sub Save(ByVal sFileName As String)
        Dim oWriter As New StreamWriter(sFileName, False)
        For Each s As IniSection In Sections
            Trace.WriteLine(String.Format("Writing Section: [{0}]", s.Name))
            oWriter.WriteLine(String.Format("[{0}]", s.Name))
            For Each k As IniSection.IniKey In s.Keys
                If k.Value <> String.Empty Then
                    Trace.WriteLine(String.Format("Writing Key: {0}={1}", k.Name, k.Value))
                    oWriter.WriteLine(String.Format("{0}={1}", k.Name, k.Value))
                Else
                    Trace.WriteLine(String.Format("Writing Key: {0}", k.Name))
                    oWriter.WriteLine(String.Format("{0}", k.Name))
                End If
            Next
        Next
        oWriter.Close()
    End Sub
 
    ' Gets all the sections
    Public ReadOnly Property Sections() As System.Collections.ICollection
        Get
            Return m_sections.Values
        End Get
    End Property
 
    ' Adds a section to the IniFile object, returns a IniSection object to the new or existing object
    Public Function AddSection(ByVal sSection As String) As IniSection
        Dim s As IniSection = Nothing
        sSection = sSection.Trim()
        ' Trim spaces
        If m_sections.ContainsKey(sSection) Then
            s = DirectCast(m_sections(sSection), IniSection)
        Else
            s = New IniSection(Me, sSection)
            m_sections(sSection) = s
        End If
        Return s
    End Function
 
    ' Removes a section by its name sSection, returns trus on success
    Public Function RemoveSection(ByVal sSection As String) As Boolean
        sSection = sSection.Trim()
        Return RemoveSection(GetSection(sSection))
    End Function
 
    ' Removes section by object, returns trus on success
    Public Function RemoveSection(ByVal Section As IniSection) As Boolean
        If Section IsNot Nothing Then
            Try
                m_sections.Remove(Section.Name)
                Return True
            Catch ex As Exception
                Trace.WriteLine(ex.Message)
            End Try
        End If
        Return False
    End Function
 
    '  Removes all existing sections, returns trus on success
    Public Function RemoveAllSections() As Boolean
        m_sections.Clear()
        Return (m_sections.Count = 0)
    End Function
 
    ' Returns an IniSection to the section by name, NULL if it was not found
    Public Function GetSection(ByVal sSection As String) As IniSection
        sSection = sSection.Trim()
        ' Trim spaces
        If m_sections.ContainsKey(sSection) Then
            Return DirectCast(m_sections(sSection), IniSection)
        End If
        Return Nothing
    End Function
 
    '  Returns a KeyValue in a certain section
    Public Function GetKeyValue(ByVal sSection As String, ByVal sKey As String) As String
        Dim s As IniSection = GetSection(sSection)
        If s IsNot Nothing Then
            Dim k As IniSection.IniKey = s.GetKey(sKey)
            If k IsNot Nothing Then
                Return k.Value
            End If
        End If
        Return String.Empty
    End Function
 
    ' Sets a KeyValuePair in a certain section
    Public Function SetKeyValue(ByVal sSection As String, ByVal sKey As String, ByVal sValue As String) As Boolean
        Dim s As IniSection = AddSection(sSection)
        If s IsNot Nothing Then
            Dim k As IniSection.IniKey = s.AddKey(sKey)
            If k IsNot Nothing Then
                k.Value = sValue
                Return True
            End If
        End If
        Return False
    End Function
 
    ' Renames an existing section returns true on success, false if the section didn't exist or there was another section with the same sNewSection
    Public Function RenameSection(ByVal sSection As String, ByVal sNewSection As String) As Boolean
        '  Note string trims are done in lower calls.
        Dim bRval As Boolean = False
        Dim s As IniSection = GetSection(sSection)
        If s IsNot Nothing Then
            bRval = s.SetName(sNewSection)
        End If
        Return bRval
    End Function
 
    ' Renames an existing key returns true on success, false if the key didn't exist or there was another section with the same sNewKey
    Public Function RenameKey(ByVal sSection As String, ByVal sKey As String, ByVal sNewKey As String) As Boolean
        '  Note string trims are done in lower calls.
        Dim s As IniSection = GetSection(sSection)
        If s IsNot Nothing Then
            Dim k As IniSection.IniKey = s.GetKey(sKey)
            If k IsNot Nothing Then
                Return k.SetName(sNewKey)
            End If
        End If
        Return False
    End Function
 
    ' Remove a key by section name and key name
    Public Function RemoveKey(ByVal sSection As String, ByVal sKey As String) As Boolean
        Dim s As IniSection = GetSection(sSection)
        If s IsNot Nothing Then
            Return s.RemoveKey(sKey)
        End If
        Return False
    End Function
 
    ' IniSection class 
    Public Class IniSection
        '  IniFile IniFile object instance
        Private m_pIniFile As IniFile
        '  Name of the section
        Private m_sSection As String
        '  List of IniKeys in the section
        Private m_keys As Hashtable
 
        ' Constuctor so objects are internally managed
        Protected Friend Sub New(ByVal parent As IniFile, ByVal sSection As String)
            m_pIniFile = parent
            m_sSection = sSection
            m_keys = New Hashtable(StringComparer.InvariantCultureIgnoreCase)
        End Sub
 
        ' Returns all the keys in a section
        Public ReadOnly Property Keys() As System.Collections.ICollection
            Get
                Return m_keys.Values
            End Get
        End Property
 
        ' Returns the section name
        Public ReadOnly Property Name() As String
            Get
                Return m_sSection
            End Get
        End Property
 
        ' Adds a key to the IniSection object, returns a IniKey object to the new or existing object
        Public Function AddKey(ByVal sKey As String) As IniKey
            sKey = sKey.Trim()
            Dim k As IniSection.IniKey = Nothing
            If sKey.Length <> 0 Then
                If m_keys.ContainsKey(sKey) Then
                    k = DirectCast(m_keys(sKey), IniKey)
                Else
                    k = New IniSection.IniKey(Me, sKey)
                    m_keys(sKey) = k
                End If
            End If
            Return k
        End Function
 
        ' Removes a single key by string
        Public Function RemoveKey(ByVal sKey As String) As Boolean
            Return RemoveKey(GetKey(sKey))
        End Function
 
        ' Removes a single key by IniKey object
        Public Function RemoveKey(ByVal Key As IniKey) As Boolean
            If Key IsNot Nothing Then
                Try
                    m_keys.Remove(Key.Name)
                    Return True
                Catch ex As Exception
                    Trace.WriteLine(ex.Message)
                End Try
            End If
            Return False
        End Function
 
        ' Removes all the keys in the section
        Public Function RemoveAllKeys() As Boolean
            m_keys.Clear()
            Return (m_keys.Count = 0)
        End Function
 
        ' Returns a IniKey object to the key by name, NULL if it was not found
        Public Function GetKey(ByVal sKey As String) As IniKey
            sKey = sKey.Trim()
            If m_keys.ContainsKey(sKey) Then
                Return DirectCast(m_keys(sKey), IniKey)
            End If
            Return Nothing
        End Function
 
        ' Sets the section name, returns true on success, fails if the section
        ' name sSection already exists
        Public Function SetName(ByVal sSection As String) As Boolean
            sSection = sSection.Trim()
            If sSection.Length <> 0 Then
                ' Get existing section if it even exists...
                Dim s As IniSection = m_pIniFile.GetSection(sSection)
                If s IsNot Me AndAlso s IsNot Nothing Then
                    Return False
                End If
                Try
                    ' Remove the current section
                    m_pIniFile.m_sections.Remove(m_sSection)
                    ' Set the new section name to this object
                    m_pIniFile.m_sections(sSection) = Me
                    ' Set the new section name
                    m_sSection = sSection
                    Return True
                Catch ex As Exception
                    Trace.WriteLine(ex.Message)
                End Try
            End If
            Return False
        End Function
 
        ' Returns the section name
        Public Function GetName() As String
            Return m_sSection
        End Function
 
        ' IniKey class
        Public Class IniKey
            '  Name of the Key
            Private m_sKey As String
            '  Value associated
            Private m_sValue As String
            '  Pointer to the parent CIniSection
            Private m_section As IniSection
 
            ' Constuctor so objects are internally managed
            Protected Friend Sub New(ByVal parent As IniSection, ByVal sKey As String)
                m_section = parent
                m_sKey = sKey
            End Sub
 
            ' Returns the name of the Key
            Public ReadOnly Property Name() As String
                Get
                    Return m_sKey
                End Get
            End Property
 
            ' Sets or Gets the value of the key
            Public Property Value() As String
                Get
                    Return m_sValue
                End Get
                Set(ByVal value As String)
                    m_sValue = value
                End Set
            End Property
 
            ' Sets the value of the key
            Public Sub SetValue(ByVal sValue As String)
                m_sValue = sValue
            End Sub
            ' Returns the value of the Key
            Public Function GetValue() As String
                Return m_sValue
            End Function
 
            ' Sets the key name
            ' Returns true on success, fails if the section name sKey already exists
            Public Function SetName(ByVal sKey As String) As Boolean
                sKey = sKey.Trim()
                If sKey.Length <> 0 Then
                    Dim k As IniKey = m_section.GetKey(sKey)
                    If k IsNot Me AndAlso k IsNot Nothing Then
                        Return False
                    End If
                    Try
                        ' Remove the current key
                        m_section.m_keys.Remove(m_sKey)
                        ' Set the new key name to this object
                        m_section.m_keys(sKey) = Me
                        ' Set the new key name
                        m_sKey = sKey
                        Return True
                    Catch ex As Exception
                        Trace.WriteLine(ex.Message)
                    End Try
                End If
                Return False
            End Function
 
            ' Returns the name of the Key
            Public Function GetName() As String
                Return m_sKey
            End Function
        End Class
        ' End of IniKey class
    End Class
    ' End of IniSection class
End Class
' End of IniFile class
VB.NET
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
Imports IniFileVb
 
 
Module IniFileVbTest
    Sub Main()
        Dim ini As New IniFile
 
        ini.AddSection("TEST_SECTION").AddKey("Key1").Value = "Value1"
        ini.AddSection("TEST_SECTION").AddKey("Key2").Value = "Value2"
        ini.AddSection("TEST_SECTION").AddKey("Key3").Value = "Value3"
        ini.AddSection("TEST_SECTION").AddKey("Key4").Value = "Value4"
        ini.AddSection("TEST_SECTION").AddKey("Key5").Value = "Value5"
        ini.AddSection("TEST_SECTION").AddKey("Key6").Value = "Value6"
        ini.AddSection("TEST_SECTION").AddKey("Key7").Value = "Value7"
 
        ini.AddSection("TEST_SECTION_2").AddKey("Key1").Value = "Value1"
        ini.AddSection("TEST_SECTION_2").AddKey("Key2").Value = "Value2"
        ini.AddSection("TEST_SECTION_2").AddKey("Key3").Value = "Value3"
        ini.AddSection("TEST_SECTION_2").AddKey("Key4").Value = "Value4"
        ini.AddSection("TEST_SECTION_2").AddKey("Key5").Value = "Value5"
        ini.AddSection("TEST_SECTION_2").AddKey("Key6").Value = "Value6"
        ini.AddSection("TEST_SECTION_2").AddKey("Key7").Value = "Value7"
 
        ' Key Rename Test
        Trace.Write("Key Rename Key1 -> KeyTemp Test: ")
        If ini.RenameKey("TEST_SECTION", "Key1", "KeyTemp") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Section Rename Test
        Trace.Write("Test section rename TEST_SECTION -> TEST_SECTION_3: ")
        If ini.RenameSection("TEST_SECTION", "TEST_SECTION_3") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Check Key Rename Post Section Rename
        Trace.Write("Test TEST_SECTION_3 rename key KeyTemp -> Key1: ")
        If ini.RenameKey("TEST_SECTION_3", "KeyTemp", "Key1") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Check Section Rename Post Section Rename
        Trace.Write("Test section rename TEST_SECTION_3 -> TEST_SECTION: ")
        If ini.RenameSection("TEST_SECTION_3", "TEST_SECTION") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Check Key Rename Key1 -> Key2 where Key2 exists
        Trace.Write("Test TEST_SECTION key rename Key1 -> Key2 where Key2 exists: ")
        If ini.RenameKey("TEST_SECTION", "Key2", "Key1") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Check Key Rename
        Trace.Write("Test TEST_SECTION key rename Key2 -> Key2Renamed: ")
        If ini.RenameKey("TEST_SECTION", "Key2", "Key2Renamed") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Test rename other section
        Trace.Write("Test section rename TEST_SECTION_2 -> TEST_SECTION_1 : ")
        If ini.RenameSection("TEST_SECTION_2", "TEST_SECTION_1") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Check remove key
        Trace.Write("Test TEST_SECTION_1 remove key Key1: ")
        If ini.GetSection("TEST_SECTION_1").RemoveKey("Key1") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Check remove key no exist
        Trace.Write("Test TEST_SECTION_1 remove key Key1: ")
        If ini.GetSection("TEST_SECTION_1").RemoveKey("Key1") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Check remove section
        Trace.Write("Test remove section TEST_SECTION_1: ")
        If ini.RemoveSection("TEST_SECTION_1") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        ' Check remove section no exist
        Trace.Write("Test remove section TEST_SECTION_1: ")
        If ini.RemoveSection("TEST_SECTION_1") Then Trace.WriteLine("Pass") Else Trace.WriteLine("Fail")
 
        'Save the INI
        ini.Save("C:\temp\test.ini")
    End Sub
End Module


Добавлено через 14 минут
Rius, как вариант xml даже лучше
0
Любитель
 Аватар для Тим70
1072 / 784 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
24.07.2023, 20:23
Памирыч, Ваш код самый простой,только беда,он ничего не читает.И зачем на кнопки записи использова два TextBox?
0
Любитель
 Аватар для Тим70
1072 / 784 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
25.07.2023, 09:03
Дам полный ответ.Была установлена игра "Красная акуула"сейчас ее стер,так вот в ней вечная жизнь и нескончаемый боезапас были в ini файле.Менять я их менял,но вот записать в исправленнный фаил не получалось,как быть?
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
25.07.2023, 12:11
Тим70, понятнее не стало. Во первых, файл мог быть блокирован, например самой игрой. Во вторых, Вы же знаете, что телепатов на форуме мало и многие сейчас в отпусках, так что без кода ничего не понятно.
1
Любитель
 Аватар для Тим70
1072 / 784 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
27.07.2023, 20:12
Uswer,просто нашел в инетне ,как сделать векчную жизнь.Для этого в ini файле надо было поменять несколько парапметров,ini открыл блокнотом или Notepad++?,уже не помню,но при его закрытии все данные востановились!Неззаю с чем он был связан,я тогда в программировании вообще был дубом.Попробую установить эту игру заного.

Добавлено через 2 часа 15 минут
Эта игра идет в iso файле,а я с ними не связываюся.Жрут кучу памяти,а у меня с ней и так проблеима.Ладно,бог и ней.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.07.2023, 20:12

Как сохранять настройки окна?
Как можно сохранять насройки окна(textbox...)?

Как правильно сохранять настройки?
Доброго времени суток бойцы ... Подскажите такую штуку Хочу в файл настроек сохранить массив int, а в выборе типа переменной нету...

Как сохранять настройки в ворде
Здравствуйте, ко мне на работу приходят много людей с флешками, что бы распечатать текстовые документы с ворда. Когда открываю ихний...

Как заставить Windows Embedded сохранять настройки?
Здравствуйте! Вопрос в следующем. Имеется тонкий клиент на базе Windows Embedded Standart, на котором используется расширенный рабочий стол...

Как сохранить настройки компонента RadioGroup в Ini-файле?
Мучаюсь над такой проблемой С таким кодом сохраняет только до двух точек а остальные почему-то не хочет ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru