Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с INI-файлом (класс TIniFile) 
:(
    Опции темы
mr.Anderson
Дата 2.12.2006, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Пишу следующее:
Код

 FILE *create = fopen( iniF.c_str(), "a+" );
 fclose( create );

 ini = new TIniFile( iniF );

 ini->WriteString( "Form", "Color", "clNavy" );
 ini->WriteString( "Form", "TextColor", "clWhite" );

 ini->WriteInteger( "Notes", "Size", 12 );
 ini->WriteString( "Notes", "Font", "Courier New" );
 ini->WriteInteger( "Notes", "LastEvent", 1 );
 ini->WriteInteger( "Notes", "DelimeterType", 0 );

 ini->WriteString( "Warning Message", "Text", "Îäíî èç óêàçàííûõ â ñïèñêå ñîáûòèé íàñòóïèëî! Çàäàííîå íà ýòî âðåìÿ ñîáûòèå áûëî âûäåëåíî." );

 ini->WriteInteger( "Events", "SubStringPos", 0 );
 ini->WriteInteger( "Events", "RegisterCheck", 1 );
 ini->WriteInteger( "Events", "EventOnly", 0 );
 ini->WriteInteger( "Events", "SortMode", 0 );
 ini->UpdateFile();

Файл создается. И даже данные из него читаются в форму. Но если файл открыть - он пуст! Почему?!


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Anikmar
Дата 2.12.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



 FILE *create = fopen( iniF.c_str(), "a+" );
 fclose( create );

Этого не нужно. TIniFile сам все создаст, если надо.

Что значит данные из него читаются в форму? Правильные данные? Из пустого файла?
PM MAIL ICQ   Вверх
mr.Anderson
Дата 2.12.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Цитата
Этого не нужно. TIniFile сам все создаст, если надо

Выписка из учебника Архангельского:
Цитата
При создании объекта типа TIniFile в него передается имя файла .ini, с которым он связывается. Файл должен существовать до создания объекта.

Насчет второго - да, в чем и суть-то! Файл пуст, его размер = 0 байт, но все параметры, которые в нем должны быть, считываются верно! А файл пуст! Почему так, не пойму. Оно, конечно, не мешает, но почему так?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Partizan
Дата 2.12.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



=) может ты просто не тот файл открываешь? ) 
ибо не может в файле размером 0 байт храниться какаянибудь инфа...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
mr.Anderson
Дата 3.12.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



В чем и интересность-то, что тот файл! Я просто пробую его удалить (т.к. вышеприведенный код файл создает заново), запускаю программу - файл system.ini создается в папке, откуда я его удалил. Программа запускается - и все настройки из INI применяются. Но если файл открыть - он пуст. Офигеть.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Partizan
Дата 3.12.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



так не бывает....


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
586
Дата 3.12.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Если путь неполный - ini-файл бкудет создан в папке Windows
PM   Вверх
Anikmar
Дата 3.12.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Я с TIniFile работаю уже Бог знает сколько времени - если файла нет он его создаст (по крайней мере у меня создает без всяких проблем).
Чтобы не путаться - попробуй задай полное имя файла. Мне кажется он действительно создается или в каталоге Windows или в текущем каталоге (не факт, что он совпадает с каталогом проекта).
Убери ручное  создание файла (именно эта строчка создает пустой файл), задай полный путь - и все будет ок.
Я пользуюсь конструкциями смены расширения файла:
Application->ExeName,
ChangeFileExt,
ExtractFileName,
EctractFilePath и т.д. (за опечатки, елси есть извините)
PM MAIL ICQ   Вверх
mr.Anderson
Дата 3.12.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Блин, а ведь и точно в каталоге Windows... С ума сойти. Он в системный файл system.ini дописывал еще и мои параметры. Во блин. Будем править...

Добавлено @ 17:57 
Хм. А как задать полный путь к файлу, если неизвестно, где будет находиться программа? Надо чтоб этот файл создавался там, где находится екзешник программы.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 3.12.2006, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Да что ты будешь делать. Написал:
Код

AnsiString iniPath = GetCurrentDir() + "\\" + iniF;
ini = new TIniFile( iniPath );

Через отладчик глянул - путь верный. Но ini все равно создается в Windows. ПОЧЕМУ!


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
586
Дата 3.12.2006, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



попробуй так
Код
AnsiString iniPath = ExtractFilePath(Application->ExeName) + iniF;

PM   Вверх
mr.Anderson
Дата 3.12.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Все равно создает в Windows.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Partizan
Дата 3.12.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



приведи весь код...особенно тоот где устанавлявается iniF


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
586
Дата 3.12.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Цитата(sim7 @  3.12.2006,  18:47 Найти цитируемый пост)
Все равно создает в Windows. 

Не может быть. 

AnsiString iniPath = ExtractFilePath(Application->ExeName) + iniF;
ini = new TIniFile( iniPath );
PM   Вверх
Anikmar
Дата 3.12.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Ну тогда пропиши константой, неужели тоже не создаст?
TIniFile *IniFile = new TIniFile("c:\\MyIni.ini");

Чудеса какие-то!
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0991 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.