Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2013, 14:03   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Восклицание Delphi. TIniFile без перезаписи

Доброго времени суток!

В одной программе часто надо работать с ini файлами чужого приложения.
Моё приложение изменяет 1-2 параметра и все. В файле параметров и секций - ну много короче.

Неприятный баг в том, что TiniFile:
1. Стирает комментарии
2. Перезаписывает весь файл, а это удаление всех секций и прочего и остаётся там 2-3 строки: секция куда я писал и пара штук параметров.

С первым ещё как-то можно мириться, а второе не приемлемо вообще.


Знает ли кто-нибудь решение проблемы?
Человек_Борща вне форума Ответить с цитированием
Старый 12.07.2013, 14:12   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

э... надо смотреть, что это за INI файл. у меня оправданные подозрения, что это НЕСТАНДАРТНЫЙ ini файл.
Поэтому, для работы с ним не стоит использовать СТАНДАРТНЫЕ виндузовые методы.

workaround. Попробуйте, например, работать с этим файлом напрямую - как с обычным, текстовым файлом...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.07.2013, 14:14   #3
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

варианты решения:
попробывать TMemIniFile
попробывать работать через TStringList (собственно в TMemIniFile так и сделано)
попробывать работать как с текстовым файлом
astecenko вне форума Ответить с цитированием
Старый 12.07.2013, 14:30   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
э... надо смотреть, что это за INI файл. у меня оправданные подозрения, что это НЕСТАНДАРТНЫЙ ini файл.
Все INI с которыми работаю подобны этому:
Код:
[Steam]
AppId=8930
SteamApps=5
SteamUser=16
SteamUserStats=10
SteamUtils=5
SteamClient=12
SteamRemoteStorage=6
SteamNetworking=5
SteamFriends=11
SteamHTTP=1
SteamScreenshots=1
SteamContentServer=2
SteamMasterServerUpdater=1
SteamGameServerStats=1
SteamGameServer=11
SteamMatchMaking=9
SteamMatchMakingServers=2
SteamUnifiedMessages=1
DLC001=16860
DLC002=16861
DLC003=16862
DLC004=16863
DLC005=16864
DLC006=16865
DLC007=16866
DLC008=16867
DLC009=16868
DLC010=16870
DLC011=16872
DLC012=16879
DLC013=34495
DLC014=34497
DLC015=99610
DLC016=99611
DLC017=99612
DLC018=99613
DLC019=235580
[Settings]
UserName=3DMGAME
Language=english
LocalStorage=true
Чем нестандартен?

Цитата:
попробывать TMemIniFile
Попробую его.

Цитата:
попробывать работать через TStringList (собственно в TMemIniFile так и сделано)
попробывать работать как с текстовым файлом
Не совсем вариант. INI допускает имя одного и того же параметра в разных секциях.
Человек_Борща вне форума Ответить с цитированием
Старый 12.07.2013, 14:41   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
procedure TForm1.Button6Click(Sender: TObject);
var Ini: TIniFile;
begin
  Ini:=TIniFile.Create('e:\My.ini');
  Ini.WriteString('Steam','SteamUser','12345');
  Ini.Free;
end;
В результате получил:
Код:
[Steam]
AppId=8930
SteamApps=5
SteamUser=12345
SteamUserStats=10
SteamUtils=5
SteamClient=12
SteamRemoteStorage=6
SteamNetworking=5
SteamFriends=11
SteamHTTP=1
SteamScreenshots=1
SteamContentServer=2
SteamMasterServerUpdater=1
SteamGameServerStats=1
SteamGameServer=11
SteamMatchMaking=9
SteamMatchMakingServers=2
SteamUnifiedMessages=1
DLC001=16860
DLC002=16861
DLC003=16862
DLC004=16863
DLC005=16864
DLC006=16865
DLC007=16866
DLC008=16867
DLC009=16868
DLC010=16870
DLC011=16872
DLC012=16879
DLC013=34495
DLC014=34497
DLC015=99610
DLC016=99611
DLC017=99612
DLC018=99613
DLC019=235580
[Settings]
UserName=3DMGAME
Language=english
LocalStorage=true
Где вышеописанная проблема? Э-э, с коментами не пробовал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.07.2013, 15:54   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
с коментами не пробовал
Подтверждаю.
Бажок проявился - перед комментом дописывается знак равенства
Цитата:
удаление всех секций и прочего
Не подтверждаю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.07.2013, 20:54   #7
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Просто используйте всем знакомый Api. Функци: AssignFile(для соеденения приложение и файла), Append(чтение, запись, файл не будет очищатся), Read(чтение строки из файла), Write(запись строки в файл), try finally(финали укажет на конец файла) и, наконец, СloseFile(закрывает файл, или просто рассоеденяет приложение и файл).
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 12.07.2013, 21:18   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

саша40, нафиг это для ини-файла? Только форум засоряете
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.07.2013, 21:40   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
всем знакомый Api
открою тайну, это не API.
Цитата:
Только форум засоряете
почитайте соседние ответы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.07.2013, 21:51   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

саша40, читать учитесь. Файлы не мои, я их только редактирую.

Цитата:
try finally(финали укажет на конец файла)
Большего бреда в жизни не слышал.

Ваша комментарии на всем форуме в подавляющем большинстве не несут никакой пользы.


To all:

Простите что ввел в заблуждение, это где-то я накосячил и файл создавался а не редактировался.
И TIniFile и TMemIniFile не стирают ни комментарии ни секции.

Последний раз редактировалось Человек_Борща; 12.07.2013 в 22:14.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просто прочитать файл, без перезаписи vovken1997 Общие вопросы Delphi 4 25.01.2013 21:55
TMemo и TIniFile Volkogriz Общие вопросы Delphi 11 29.12.2012 08:29
TStringList и TIniFile -Jack- Общие вопросы Delphi 3 16.10.2012 09:56
Ошибка перезаписи в файл sqr Общие вопросы Delphi 5 15.03.2012 19:36
TIniFile matus Общие вопросы Delphi 6 21.02.2008 13:59