Форум программистов, компьютерный форум, киберфорум
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. Показов 15222. Ответов 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
 Аватар для Yury Komar
4375 / 3445 / 512
Регистрация: 27.01.2014
Сообщений: 6,267
20.12.2014, 11:38
Студворк — интернет-сервис помощи студентам
Памирыч, вроде можно, что то я об этом слышал и гдето тут даде вилел тему на эту тему
0
4 / 4 / 0
Регистрация: 16.10.2014
Сообщений: 137
05.01.2016, 19:42
В VB6 было такое удобное решение Готовые решения и полезные коды на Visual Basic 6.0, но оно не работает в VB.NET. Может его чуток знатоки доработают?
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
05.01.2016, 21:00
Решение вполне рабочее и в VB.Net, с небольшой коррекцией.
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
Imports System.Text
'…
Private Declare Auto Function GetPrivateProfileString Lib "kernel32" _
    (ByVal lpapplicationname As String, ByVal lpkeyname As String, ByVal lpdefault As String, _
    ByVal lpreturnedstring As StringBuilder, ByVal nSize As Integer, ByVal lpfilename As String) As Integer
Private Declare Auto Function WritePrivateProfileString Lib "kernel32" _
        (ByVal lpapplicationname As String, ByVal lpkeyname As String, _
        ByVal lpstring As String, ByVal lpfilename As String) As Integer
Private Sub cmdWrite_Click(sender As System.Object, e As System.EventArgs) Handles cmdWrite.Click
    writeINI("c:\03\test.ini", "TestSection", "TestKey", "txtValue")
End Sub
Private Sub cmdGet_Click(sender As System.Object, e As System.EventArgs) Handles cmdGet.Click
    Dim txtValue As String = sGetINI("c:\03\test.ini", "TestSection", "TestKey", "None")
    MsgBox(txtValue)
End Sub
Private Sub writeINI(sINIFile As String, sSection As String, sKey As String, sValue As String)
    Dim n As Integer = WritePrivateProfileString(sSection, sKey, sValue, sINIFile)
End Sub
Public Function sGetINI(sINIFile As String, sSection As String, sKey As String, sdefault As String) As String
    Dim res As Integer
    Dim sb As New StringBuilder(500)
    res = GetPrivateProfileString(sSection, sKey, sdefault, sb, sb.Capacity, "test.ini")
    Return sb.ToString
End Function
1
 Аватар для GSXL
172 / 180 / 27
Регистрация: 26.11.2011
Сообщений: 386
Записей в блоге: 1
06.01.2016, 02:57
Я создаю XML файл с стандартными настройками и перезаписываю при закрытие формы в случае их изменений. А ini просто не воспринимаю.
0
26 / 18 / 8
Регистрация: 25.01.2015
Сообщений: 48
06.01.2016, 12:34
VB создает конфигурационной файл добавляя слово config
Примерно имя программы foo.exe- имя конфигурационного файла foo.exe.config.xml.
И находится этот файл рядом с exe (dll) файла
My.Settings использует этот файл
userSection- можно менять через программу- applicationSection только читать
Вроде так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<userSettings>
        <foo.MySettings>
            <setting name="CurrentUser" serializeAs="String">
                <value>0</value>
            </setting>
            <setting name="OnlyOneWindow" serializeAs="String">
                <value>False</value>
            </setting>          
        </foo.MySettings>
       
    </userSettings>
    <applicationSettings>
        <foo.MySettings>
            <setting name="Setting" serializeAs="String">
                <value>0</value>
            </setting>
        </foo.MySettings>
    </applicationSettings>
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
06.01.2016, 12:42
Настройки приложения. Варианты хранения.
https://www.cyberforum.ru/blog... g3189.html
Вложения
Тип файла: pdf NetConfigL.pdf (466.7 Кб, 45 просмотров)
6
3 / 3 / 0
Регистрация: 03.12.2014
Сообщений: 78
30.10.2016, 14:20
Цитата Сообщение от Yury Komar Посмотреть сообщение
Памирыч, вроде можно, что то я об этом слышал и гдето тут даде вилел тему на эту тему
Можешь пожалуйста найти, где видели про изменения сохранения пути файла настроек user.config?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4375 / 3445 / 512
Регистрация: 27.01.2014
Сообщений: 6,267
07.11.2016, 20:43
РичардЗорг, Поищи сам, я с телкфона и мне тяжко будет искать... Плюс непомню что за тема была.
0
1 / 1 / 0
Регистрация: 13.01.2021
Сообщений: 100
23.08.2021, 01:58
Доброго времени суток!
Памирыч, Хочу обратится именно к Вам Ваш код Хорош, использовал на VB.Net 2008, записывает всё хорошо в файл, но вот при нажатии на кнопку загрузить не загружает инфу с файла.
Как загрузить обратно её, с каждой строки ?

Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
'____________________________________
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Call WritePrivateProfileString("INFO", TextBox2.Text, TextBox1.Text, "C:\test.ini")
    End Sub
'____________________________________
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = "Введите Ваше имя"
        Button1.Text = "Сохранить"
        Button2.Text = "Загрузить"
    End Sub
'____________________________________
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim rc As String = Strings.StrDup(255, vbNullChar)
        Dim x As Integer
        x = GetPrivateProfileString("INFO", TextBox2.Text, "", rc, 255, "C:\test.ini")
        If x <> 0 Then rc = Strings.Left(rc, x)
        TextBox1.Text = rc
    End Sub


Заранее Огромное Человеческое СПАСИБО!
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
23.08.2021, 22:36
Вполне жизнеспособный код для чтения/записи INI кажется здесь
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
23.08.2021, 22:42
А также вот, из книги "Рецепты программирования"
Миниатюры
Как сохранять настройки в .ini файл?  
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
24.08.2021, 00:39
Разработчики VS давно подумали о нуждах кодописателя по сохранению разных настроек в файл и придумали My.Settings, о чём писал Замабувараев. И я не понимаю зачем нужно изобретать велосипед. Winney, совет про сохранение положения и размеров формы в реестр дельный, вот только он не совсем по теме (тема про ini-файл). А так да, если настроек не миллион, то можно и в реестр.
0
1 / 1 / 0
Регистрация: 13.01.2021
Сообщений: 100
24.08.2021, 14:22
Можно по подробней про My.Settings ?
я правильно понимаю что, можно не пользоваться ini и всё сохранить в My.Settings ?
Заранее спасибо за помощь.
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
24.08.2021, 17:13
Цитата Сообщение от mast_12 Посмотреть сообщение
Можно по подробней про My.Settings ?
Подробнее тут, а пример есть тут (см. ответ №2).
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
25.08.2021, 19:19
Цитата Сообщение от Uswer Посмотреть сообщение
Разработчики VS давно подумали о нуждах кодописателя по сохранению разных настроек в файл и придумали My.Settings, о чём писал Замабувараев. И я не понимаю зачем нужно изобретать велосипед. Winney, совет про сохранение положения и размеров формы в реестр дельный, вот только он не совсем по теме (тема про ini-файл). А так да, если настроек не миллион, то можно и в реестр.
Uswer, в целом поддерживаю ваши тезисы. Касаемо тематики - не укладывается у меня в голове, кому и зачем может требоваться сохранять расположение формы и размер (в бизнес-приложениях Win-Form, имеется ввиду). Для более полного понимания задачи я бы указал назначение приложения (может это проигрыватель? хз).
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
25.08.2021, 19:53
Цитата Сообщение от Winney Посмотреть сообщение
не укладывается у меня в голове, кому и зачем может требоваться сохранять расположение формы и размер
Уходим от темы и флудим, но от себя скажу, что таких приложений достаточно много и нужда в этом точно есть.
0
2 / 2 / 0
Регистрация: 09.06.2020
Сообщений: 5
08.09.2021, 14:52
создаем класс:

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
Imports System.Text
 
Public Class IniFile
    ' API functions
    Private Declare Ansi Function GetPrivateProfileString _
        Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _
        (ByVal lpApplicationName As String,
         ByVal lpKeyName As String, ByVal lpDefault As String,
         ByVal lpReturnedString As StringBuilder,
         ByVal nSize As Integer, ByVal lpFileName As String) _
        As Integer
    Private Declare Ansi Function WritePrivateProfileString _
        Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
        (ByVal lpApplicationName As String,
         ByVal lpKeyName As String, ByVal lpString As String,
         ByVal lpFileName As String) As Integer
    Private Declare Ansi Function GetPrivateProfileInt _
        Lib "kernel32.dll" Alias "GetPrivateProfileIntA" _
        (ByVal lpApplicationName As String,
         ByVal lpKeyName As String, ByVal nDefault As Integer,
         ByVal lpFileName As String) As Integer
    Private Declare Ansi Function FlushPrivateProfileString _
        Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
        (ByVal lpApplicationName As Integer,
         ByVal lpKeyName As Integer, ByVal lpString As Integer,
         ByVal lpFileName As String) As Integer
    Dim strFilename As String
 
    ' Constructor, accepting a filename
    Public Sub New(ByVal Filename As String)
        strFilename = Filename
    End Sub
 
    ' Read-only filename property
    ReadOnly Property FileName() As String
        Get
            Return strFilename
        End Get
    End Property
 
    Public Function GetString(ByVal Section As String, ByVal Key As String, ByVal [Default] As String) As String
        On Error GoTo err_
        ' Returns a string from your INI file
        Dim intCharCount As Integer
        Dim objResult As New StringBuilder(256)
        intCharCount = GetPrivateProfileString(Section, Key, [Default], objResult, objResult.Capacity, strFilename)
        If intCharCount > 0 Then
            GetString = Left(objResult.ToString, intCharCount)
        Else
            GetString = [Default] 'esq 160307
        End If
        ' замена вертикального апострофа (который ломает SQL-запрос) на обратный
        GetString = Replace(GetString, "'", "`")
        err_:
    End Function
 
    Public Function GetInteger(ByVal Section As String,
                               ByVal Key As String, ByVal [Default] As Integer) As Integer
        ' Returns an integer from your INI file
        Return GetPrivateProfileInt(Section, Key,
                                    [Default], strFilename)
    End Function
 
    Public Function GetBoolean(ByVal Section As String,
                               ByVal Key As String, ByVal [Default] As Boolean) As Boolean
        ' Returns a boolean from your INI file
        Return (GetPrivateProfileInt(Section, Key,
                                     CInt([Default]), strFilename) = 1)
    End Function
 
    Public Sub WriteString(ByVal Section As String,
                           ByVal Key As String, ByVal Value As String)
        ' Writes a string to your INI file
        WritePrivateProfileString(Section, Key, Value, strFilename)
        Flush()
    End Sub
 
    Public Sub WriteInteger(ByVal Section As String,
                            ByVal Key As String, ByVal Value As Integer)
        ' Writes an integer to your INI file
        WriteString(Section, Key, CStr(Value))
        Flush()
    End Sub
 
    Public Sub WriteBoolean(ByVal Section As String,
                            ByVal Key As String, ByVal Value As Boolean)
        ' Writes a boolean to your INI file
        WriteString(Section, Key, CStr(CInt(Value)))
        Flush()
    End Sub
 
    Private Sub Flush()
        ' Stores all the cached changes to your INI file
        FlushPrivateProfileString(0, 0, 0, strFilename)
    End Sub
End Class

Для чтения параметров ini файла:
VB.NET
1
2
3
4
Dim uname As String
        Dim objIniFile As New IniFile("ПУТЬДОВАШЕГОФАЙЛА\base.ini")
 
        uname= objIniFile.GetString("General", "setup", "значениепоумолчаниюеслипусто")

Для записи параметров в ini файл:
VB.NET
1
2
3
Dim objIniFile As New IniFile("ПУТЬДОВАШЕГОФАЙЛА\base.ini")
 
        objIniFile.WriteString("General", "setup", "чтонужнозаписать")
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18407 / 14338 / 5370
Регистрация: 17.03.2014
Сообщений: 29,027
Записей в блоге: 1
08.09.2021, 15:12
ldragon24, вы в курсе что эти методы давно устарели и нужны только для совместимости с win16? В .NET есть своя поддержка конфигурации на основе XML. Лучше пользоваться ей.
0
2 / 2 / 0
Регистрация: 09.06.2020
Сообщений: 5
08.09.2021, 15:31
да в курсе, но человек задал вопрос, отчего же не ответить...
0
0 / 0 / 0
Регистрация: 01.07.2023
Сообщений: 4
06.07.2023, 21:03
Здравствуйте. Передали мне проекты написанные на VB60 и на VS 2013 тоже на Visual Basic. Так там используется API функция для чтения записи параметров из ini файла. При анализе кода проекта мне выдало предупреждение о не безопасном использовании и порекомендовало использовать Class NativeMethods. Ну, хорошо... перетащил в защищенный класс.. и все поломал. То есть если я без правки кода компелю программу то она работает и читает данные из INI файла. А если я делаю по рекомендации, то параметры не передаются. Как победить?

Вот объявление как в VB60:
Visual Basic
1
2
    Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
     Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
И оно работает..

Вот объявление того же самого но по рекомендации, и параметр из секции не передается:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
    Private Class NativeMethods
 
        <DllImport("kernel32", CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
        Public Shared Function WritePrivateProfileString(ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
          
        End Function
 
        <DllImport("kernel32", CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
        Public Shared Function GetPrivateProfileString(ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
           
        End Function
    End Class
Программа падает при попытки перевести к другому типу то что должна считать из файла INI, по отладке там не число из файла а пустая строка. То есть значение не передалось. Передается значение количества знаков в строке равное 1000.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.07.2023, 21:03

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
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