Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
6 / 6 / 0
Регистрация: 09.03.2017
Сообщений: 140
1

Нюансы GetPrivateProfileString\GetPrivateProfileInt

20.03.2017, 13:17. Показов 2328. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть вопросы, помогите новичку!

1)Почему при чтении параметров из ini файла этими функциями
приходится указывать имя файла так:".\\settings.ini" ??
Если не поставить точку и два слеша, то придется указывать полный путь!
я вынужден писать такой код:
C++
1
GetPrivateProfileString("SectionA", "turbo", NULL, nstr,sizeof(nstr),".\\settings.ini");
2)Раскопав манул в MSDN по этой функции я обнаружил неприятную новость для себя:
"Note This function is provided only for compatibility with 16-bit Windows-based applications. Applications should store initialization information in the registry."

Перевожу как могу: "Примечание.Эта хрень поддерживается только ради жалости к 16-битным старым приложениям
для теплой ламповой Windows. Нормальные приложения ДОЛЖНЫ сохранять свою байду в реестр!"


Вопросы: эта функция работает в windows версиях выше чем windows 7 и в серверных ?
Есть ли какая нибудь 16-битная природа в этой функции ? (ограничения какие нибудь?)
Почему это вдруг приложения ДОЛЖНЫ записывать свои параметры в реестр ?
Представьте себе, если save игры писать в реестр!
Зачем мне предлагают реестр ? Я видел кучу современных win програм, которые хранят параметры в СВОИХ файлах, рядом с бинарником или в юзерских папках. Честно.
p.s.
когда стану поумней, я возьму функционал из boost. Правда не знаю, нужно ли это мне.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2017, 13:17
Ответы с готовыми решениями:

Непонятки с GetPrivateProfileString()
Привет, хочу прочитать с .ini некую информацию. Читаю так: LPTSTR str; ...

Составной путь к файлу GetPrivateProfileString()
Всем привет. Пытался найти решение моей проблемы, но безуспешно( Мне нужно прописать путь к...

GetPrivateProfileString возвращает не правильно значение
Добрый день, в общем есть 2 функции GetPrivateProfileString и WritePrivateProfileString, для работы...

GetPrivateProfileString не выводит все ключи
Добрый день! Мучаюсь уже несколько дней, так и не пойму в чем загвоздка. Вообщем есть WinApi...

5
Заблокирован
21.03.2017, 01:46 2
далеко не
Цитата Сообщение от _newbie_coder Посмотреть сообщение
хрень
работает во-всех Windows, x64 - включительно
1
6 / 6 / 0
Регистрация: 09.03.2017
Сообщений: 140
21.03.2017, 12:06  [ТС] 3
Цитата Сообщение от stamp Посмотреть сообщение
далеко не

Цитата Сообщение от stamp Посмотреть сообщение
Цитата Сообщение от _newbie_coder Посмотреть сообщение
хрень
Это я прикалываюсь. Мне самому эта функция очень помогла и сэкономила время.
Цитата Сообщение от stamp Посмотреть сообщение
работает во-всех Windows, x64 - включительно
Это хорошо.

Добавлено через 6 минут
Кстати никак не могу понять вот этой логики в MSDN
Цитата Сообщение от MSDN
only for compatibility with 16-bit Windows-based applications.
почему only ?
1)Разве эта функция является затычкой или костылем ? Это просто абстракция от рутины работы с INI.
2)С INI-парадигмой перенос папки с программой, сохранит её настройки. В случае реестра - НЕТ
3)С INI-парадигмой можно легко отдать настройки другому пользователю на другой машине.
Смысл этого реестра ? Я не понимаю.
Кстати, если с этой функцией работают не только 16-битные приложения,а и 32-х и 64- битные, то почему они
написали "совместимость" и "16-битные" ???
Если это просто функция, и ОС её "дает" любым приложениям, то при чем тут совместимость с 16 битными ?
Я вообще запутался.
0
28 / 27 / 11
Регистрация: 04.03.2010
Сообщений: 199
21.03.2017, 13:51 4
_newbie_coder, многие необходимые и нужные на практике моменты msdn попросту не разъясняет и упускает. А еще, msdn любит лукавит насчёт описания функций и минимальных требований к ОС. Я сам часто встречал функции, в описании которых msdn утверждает, что требуется минимум win7. А на деле они прекрасно работаю на XP.
Не воспринимай буквально всё, что там пишут. Используй то, что удобно, что нравится. Я например, до сих в некоторых классах для работы с текстовыми строками иногда использую char, хотя есть библиотека string, а в C++Builder еще и классы AnsiString, UnicodeString. Но мне так нравится
1
30 / 11 / 2
Регистрация: 24.02.2017
Сообщений: 47
21.03.2017, 19:01 5
Цитата Сообщение от _newbie_coder Посмотреть сообщение
приходится указывать имя файла так:".\\settings.ini" ??
Если не поставить точку и два слеша, то придется указывать полный путь!
так написано же
If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.
а когда пишешь ".\\some.ini" - явно указываешь, что в текущей надо искать
Цитата Сообщение от _newbie_coder Посмотреть сообщение
Нормальные приложения ДОЛЖНЫ
should = следует, что явно не значит "ДОЛЖНЫ"
Цитата Сообщение от _newbie_coder Посмотреть сообщение
1)Разве эта функция является затычкой или костылем ? Это просто абстракция от рутины работы с INI.
2)С INI-парадигмой перенос папки с программой, сохранит её настройки. В случае реестра - НЕТ
3)С INI-парадигмой можно легко отдать настройки другому пользователю на другой машине.
1) так это устаревшая, т.к. использовались они вместо реестра, о чем может быть речь
2,3)а кто мешает в реестр писать установщиком, и никто не мешает пользоваться другим форматом разметки и сторонними либами для вытаскивания значений

microsoft раньше использовали ini-файлы, теперь реестр. если они посчитали, что так лучше, значит так и есть
2
6 / 6 / 0
Регистрация: 09.03.2017
Сообщений: 140
22.03.2017, 06:09  [ТС] 6
Цитата Сообщение от Asaido Посмотреть сообщение
так написано же
If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.
Так по логике должно быть тогда так "filename.ext". Это удовлетворяет указанию " does not contain a full path to the file,"

Я не могу понять, что делают там два слеша с точкой. Точка зачем ?

Добавлено через 1 минуту
Цитата Сообщение от Igor-84 Посмотреть сообщение
_newbie_coder, многие необходимые и нужные на практике моменты msdn попросту не разъясняет и упускает. А еще, msdn любит лукавит насчёт описания функций и минимальных требований к ОС. Я сам часто встречал функции, в описании которых msdn утверждает, что требуется минимум win7. А на деле они прекрасно работаю на XP.
Жесть! Какие еще скелеты хранит шкаф майкрософт ?

Добавлено через 1 минуту
Цитата Сообщение от Igor-84 Посмотреть сообщение
Не воспринимай буквально всё, что там пишут. Используй то, что удобно, что нравится.
ОК!
0
22.03.2017, 06:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2017, 06:09
Помогаю со студенческими работами здесь

GetPrivateProfileString "съедает" пробел
Привет, есть ini файл, в нем такая строка: Считываю так и вставляю в Edit так: TCHAR Text;...

Нюансы в программном коде Win32 API
Здравствуйте, господа профи! Именно к Вам есть вопросы связанные в программированием в C++ для...

GetPrivateProfileInt всегда возвращает ноль
Хотел считывать значение из INI-файла, но столкнулся с такой проблемой: #include <Windows.h>...

Нюансы обучения: желание учесть все нюансы - корректность кода или overengineering?
Здравствуйте программисты! Ответьте пожалуйста на такой вопрос(объясните) Вот я учу С++ и решаю...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru