Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/23: Рейтинг темы: голосов - 23, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 03.12.2019
Сообщений: 76

Работа с ini файлами

25.01.2021, 10:02. Показов 5010. Ответов 31
Метки нет (Все метки)

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

0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.01.2021, 10:02
Ответы с готовыми решениями:

Работа с ini файлами
Всем привет! В папке с программой у меня хранятся ini файлы. Ребят, можно ли как-то сделать, чтобы по нажатию кнопки необходимые мне ini...

Работа с Ini-файлами
Добрый день читающие и просматривающие. Обращаюсь к вам за помощью/советом. Развивая свой проект захотел сделать следующее: имеется...

Работа с ini файлами
Вобщем пишу игрушку Тамагочи для себя, что бы разбираться с ООП. Игра конечно не доработана, но прочитал про ини файл и меня это...

31
Модератор
 Аватар для D1973
9954 / 6490 / 2461
Регистрация: 21.01.2014
Сообщений: 27,495
Записей в блоге: 3
04.02.2021, 17:17
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Alex Prozac Посмотреть сообщение
лежит еще куча "лишних" секций
Alex Prozac, а вот это уже на совести того, кто проектировал этот INI... Логично, что есть размер и положение окна приложения свое для каждого пользователя (то бишь параметры в каждой секции), логично также, что есть такая же фигня со значениями "по умолчанию" (какая-то отдельная секция типа [default])... И ничего лишнего...
Цитата Сообщение от Alex Prozac Посмотреть сообщение
ReadSections же все без разбору читает
Оно читает только имена секций.

Не по теме:

Цитата Сообщение от Alex Prozac Посмотреть сообщение
Кому как нравится, короче
Да уж, спорить я точно не собираюсь...

0
 Аватар для Alex Prozac
105 / 90 / 9
Регистрация: 25.11.2020
Сообщений: 261
04.02.2021, 17:53
Оно читает только имена секций.
Я это и имел в виду - она читает только имена секций, но все подряд. А помимо секций типа [User1], [User2]... [UserN] в инике ведь могут быть еще секции - типа [FormOptions] или еще какие-то параметры. И если нам нужно найти пароль к логину, то придется сортировать TStrings с именами секций, дабы отсеять то, что нам не нужно. Вот что я имел в виду - возможно, я просто недостаточно ясно выразился.

И ничего лишнего...
Да - положение окна клиентской части логично записать в секции клиентов. Но я имел в виду, что может быть еще куча секций с какими-то общими настрйками приложения - портов, соединения и т.п. Вот лично я не люблю делать по сто инек, и стараюсь все, что нужно запихнуть в одну. А вообще, конечно, конкретно здесь логично разделить все на две иньки: в одной - настройки приложения, а в другой - только база данных клиентов.
0
193 / 140 / 36
Регистрация: 19.11.2020
Сообщений: 881
04.02.2021, 18:00
Плакать хочется смотря на то, как люди это обсуждают на серьёзных щах.

Ну возьмите какую нибудь готовую базу.
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
04.02.2021, 19:16
OpXiv, я тебя не пойму. В соседней теме в благородном порыве помочь начинающему (что есть хорошо) ты попытался привести простое решение (однако пошел по заведомо порочному пути, ни к чему, кроме проблем, не приведущему). Здесь же ты советуешь начинающему взять готовые базы, что есть далеко не начальный уровень. И в то же время ini - классический народный способ программирования подобных функционалов. Только грамотно применить.

Будь последовательным
1
193 / 140 / 36
Регистрация: 19.11.2020
Сообщений: 881
04.02.2021, 20:53
Цитата Сообщение от DenNik Посмотреть сообщение
В соседней теме в благородном порыве помочь начинающему (что есть хорошо)
Одно дело показать ТС алгоритм, которого он пытался добиться. Другое дело упорно рассуждать о том, что не имеет права на жизнь.

Добавлено через 52 секунды
Цитата Сообщение от OpXiv Посмотреть сообщение
Одно дело показать ТС алгоритм, которого он пытался добиться.
Он его посмотрит, увидит как это можно реализовать. Проанализирует, увидит что он не идеальный, и надо дополнить. И начнёт уже его допилить до потоков, до стримов и прочего.

Просто учась на своих ошибках.
0
04.02.2021, 23:13

Не по теме:

Аа, типа "вот тебе гавно, но я не скажу, что это гавно. Как вступишь - сам поймёшь и спасибо скажешь за столь ценный урок"..
Жоский ты учитель, однако

0
 Аватар для Alex Prozac
105 / 90 / 9
Регистрация: 25.11.2020
Сообщений: 261
05.02.2021, 01:12
что не имеет права на жизнь
А с какого это перепуга ini перестал иметь право на жизнь? Вы лично ему приговор вынесли? Для небольших БД, сохранения настроек - вполне удобный формат, а главное - простой в работе! Даже MS его до сих пор используют... Вот, знаете, не очень люблю, когда кто-то начинает кидаться такими вот пафосными фразами: Вас же никто не заставляет пользоваться ini, а другим он нравится за удобство и наглядность!..
0
193 / 140 / 36
Регистрация: 19.11.2020
Сообщений: 881
05.02.2021, 01:33
Цитата Сообщение от Alex Prozac Посмотреть сообщение
ini перестал иметь право на жизнь?
Я не против самого ini. Я против хранения таких данных в ini.

Добавлено через 13 минут
Этак лет 5 назад написал данный код для бесплатного хостинга. При хороших алгоритмах очень сложно взломать пользовательские данные. Скорость работы на высшем уровне. Используется только ftp файлы на спичках.

До сих пор работает на множества серверах (Урезанный выкладываю для показа)

Кликните здесь для просмотра всего текста
PHP
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
<?php
 
function HashLogin($Login) {
    return $Login;
};
 
function HashPassword($Login) {
    return $Login;
};
 
function DecodeData($Data, $Login, $Pass) {
    return $Data;
};
 
function EncodeData($Data, $Login, $Pass) {
    return $Data;
};
 
 
$ListReturn = [];
 
if(isset($_GET['r']) && isset($_GET['login']) && isset($_GET['pass'])) {
    if($IsError = strlen($login = HashLogin($_GET['login'])) < 3)
        $ListReturn['Error'] = 'Логин слишком короткий' . PHP_EOL;
    
    if($IsError = strlen($pass = HashPassword($_GET['pass'])) < 5) 
        $ListReturn['Error'] .= 'Пароль слишком короткий' . PHP_EOL;
    
    if(!$IsError) {
        if (preg_match("#^[a-zа-я0-9_@$%&!-]+$#iu",$login.$pass)) {
            $dir = __DIR__ . '/Users/' . $login;
            
            $IsUser = is_dir($dir);
            $File = $dir . '/' . $pass;
            $IsPass = $IsUser && is_file($File);
            
            switch($_GET['r']) {
                case 'auth':
                    if($IsPass)
                        $ListReturn['response'] = DecodeData(file_get_contents($File), $login, $pass);
                    else
                        $ListReturn['Error'] .= 'Неверный логин или пароль' . PHP_EOL;
                break;
                case 'register':
                    if(!$IsUser) {
                        mkdir($dir, 0777, true);
                        
                        
                        // *****************************************************
                        $User = [];
                        $User['login'] = $login;
                        $User['IP'] = $_SERVER['REMOTE_ADDR'];
                        $User['IP2'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
                        
                        // *****************************************************
                        file_put_contents($File, EncodeData(json_encode($User, JSON_UNESCAPED_UNICODE), $login, $pass));
                        $ListReturn['response'] = 'Session register';
                    } else 
                        $ListReturn['Error'] .= 'Данный пользователь уже существует' . PHP_EOL;
                break;
                case 'passreset':
                    if($IsPass) {
                        if(isset($_GET['newpass'])) {
                            if(strlen($NewPass = HashPassword($_GET['newpass'])) < 5) 
                                $ListReturn['Error'] .= 'Пароль слишком короткий' . PHP_EOL;
                            else {
                                if(preg_match("#^[a-zа-я0-9_@$%&!-]+$#iu", $pass)) {
                                    rename($File, $dir . '/' . $NewPass);
                                    $ListReturn['response'] = 'Session passreset';
                                } else
                                    $ListReturn['Error'] .= 'Пароль имеет запрещённые символы. Разрешены - a-zа-я0-9_@$%&!'. PHP_EOL;
                            }
                        } else 
                            $ListReturn['Error'] .= 'Проверьте правильность набранных данных';
                    } else 
                        $ListReturn['Error'] .= 'Неверный логин или пароль' . PHP_EOL;
                break;
            }
        } else
            $ListReturn['Error'] .= 'Логин или пароль, имеют запрещённые символы. Разрешены - a-zа-я0-9_@$%&!'. PHP_EOL;
    }
} else
    $ListReturn['Error'] .= 'Проверьте правильность набранных данных';
 
echo json_encode($ListReturn, JSON_UNESCAPED_UNICODE);


В общем, с такой регистрацией\авторизацией даже сам владелец сайта не будет знать ничего, что не нужно будет нести потом в ФСБ)))
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
05.02.2021, 01:36

Не по теме:

Цитата Сообщение от DenNik Посмотреть сообщение
Аа, типа "вот тебе гавно, но я не скажу, что это гавно. Как вступишь - сам поймёшь и спасибо скажешь за столь ценный урок"..
а еще в соседней теме пишет, что не надо думать и самому учитсья на своих ошибках, надо просто прочитать что-то там как правильно делать)))))


у меня подозрения - вест вернулся...

0
 Аватар для Alex Prozac
105 / 90 / 9
Регистрация: 25.11.2020
Сообщений: 261
05.02.2021, 01:57
Я против хранения таких данных в ini.
Опять же - все зависит от назначения проги. Если это телефонный справочник или календарь, который будет просто лежать на винте - то незашифрованный ini тут даже предпочтительнее, т.к. при сбое собственно проги можно открыть его ручками и легко вытащить дни рождения всех бывших)) А если сайт - то да, конечно, я согласен! Но если ТС спрашивает про азы работы с ini то, думаю, что до серверного софта тут еще рановато...
0
 Аватар для Пытливый
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
05.02.2021, 02:13
Вы ТС давно в теме видели? Чихать он хотел на все ваши рассуждения, родит очередную тему "Я все сделал, но чего-то не работает, сделайте за меня"
0
 Аватар для Alex Prozac
105 / 90 / 9
Регистрация: 25.11.2020
Сообщений: 261
07.02.2021, 03:52
Пытливый, дык там, по-моему, не он, а она))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.02.2021, 03:52

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

Работа с ini файлами
Всем доброго времени суток дороги форумчани! Заранее приношу свои извинение за столь нубскую тему но просто уже сил моих не хватает...

Работа с ini файлами
Добрый день, появился не большой вопрос! Мне нужно в программе работать с ini файлом который должен быть в папке с программой. А...

Работа с ini файлами и panel
Всем привет) Уважаемые, помогите решить проблему чтения ini-файла в компонент panel в свойство caption. Записывает то что нужно и как...

Работа с ini файлами в Delphi
Почему у меня не считывает, и нет ошибки? Как думаете?


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru