Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сохранение/чтение данных проги в файл


Автор: Drizhenko 11.1.2006, 07:56
Моя прога использует определенные данные, которые по умолчанию вбиты в текстовые поля. Как сделать так, чтобы если пользователь внес изменения в эти поля, поставил свои значения, то при следующем запуске программа запускалась с этими значениями. Наверное, нужно использовать какойнибудь файл. Куда будут вноситься изминения. Подскажите как это можно сделать. И какой тип файла для этого можно использовать?

Автор: chaos 11.1.2006, 08:10
как вариант если полей не много то можно использовать реестр
ну а если много то можно использовать ini файлы

Автор: ~FoX~ 11.1.2006, 09:15
А если очень много, то использовать БД smile

Автор: Albinos_x 11.1.2006, 10:38
Цитата(chaos @ 11.1.2006, 08:10 Найти цитируемый пост)

как вариант если полей не много то можно использовать реестр
ну а если много то можно использовать ini файлы

или обычный текстовый файл...

Автор: Drizhenko 11.1.2006, 11:00
Полей не много. Тогда у меня возникает следующий вопрос. Читал инфу про .inf файлы, выяснил что они предназначены для инсталяции оборудования, а ini файлы то же самое что .inf. Так ли это? И еще раньше пробовал через текстовые файлы делать, но как от туда извлекать инфу? Например нужно прочитать десятый символ в пятой строке?

Автор: Albinos_x 11.1.2006, 11:13
Цитата
Например нужно прочитать десятый символ в пятой строке?

Код
...
Readln(f,s);
if length(s)>10 then
   Simvol10:=s[10]
   else
   Simvol10:='' ;
...

Автор: Drizhenko 11.1.2006, 11:22
Если я правильно понял, то будет читать просто десятый символ. А как насчет пятой строки???

Автор: Albinos_x 11.1.2006, 11:35
Цитата(Drizhenko @ 11.1.2006, 11:22 Найти цитируемый пост)

А как насчет пятой строки???

самый простой способ:
Код
...    
reset(f);
for i:=0 to 4 do
   Readln(f,s);
stroka5:=s;

Автор: Guedda 11.1.2006, 11:53
Вообще лажа все.
Лучше пользоваться ini-файлами. Делается это следующим образом.
Пример: Необходимо запомнить, где находится окно приложения и при следующем запуске программы установить окно в позицию при закрытии. Это делается очень просто:
Код

uses
  ...,IniFiles,... //подключаем модуль для работы с ini файлами

...

procedure TForm1.FormCreate(Sender : Tobject); //Здесь вытаскиваются из файла данные по расположению.
var
  IniFile : TIniFile;
begin
  IniFile := TIniFile.Create('MyIniFile.ini'); //пытаемся подгрузить файл
  Form1.Left := IniFile.ReadInteger('POSITION', 'Left', 100); //если такого параметра нет, то по умолчанию стоит 100 пикс.
  Form1.Top := IniFile.ReadInteger('POSITION', 'Top', 100); //то же самое
  IniFile.Free; //освобождаем
end;

...

procedure TForm1.FormDestroy(Sender : TObject); //здесь мы будем сохранять позицию
var
  IniFile : TIniFile;
begin
  IniFile := TIniFile.Create('MyIniFile.ini');
  IniFile.WriteInteger('POSITION', 'Left', Form1.Left); //записываем левый параметр
  IniFile.WriteInteger('POSITION', 'Top', Form1.Top); //записываем верхний параметр
  IniFile.Free; //освобождаем
end;


Файл MyIniFile.ini будет выглядеть вот так:
Код

[POSITION]
Left=460
Top=302

Это самое легкое. В общем поразбираться, и понравится.

Автор: YurikGL 11.1.2006, 11:56
Лучше всего использовать INI
Если хочешь показаться современным или данные имеют сложную структуру - пользуй XML...

Автор: ~FoX~ 11.1.2006, 12:18
Если данных не много, то можно и реестр использовать....Получиться тоже что и INI только красивше.

Автор: Drizhenko 11.1.2006, 12:27
Спасибо, попробую c ini файлом. А насчет реестра. Как вы думаете если его засорять всяким барохлом, потом винда не будет тормозить?

Автор: Guedda 11.1.2006, 12:28
Нет. Винда то тормозить не будет, если правильно создавать ветки и ключи...

Автор: ~FoX~ 11.1.2006, 14:02
Drizhenko
А просто нужно аккуратненько за собой прибрать при надобности и неичего не случиться....

Автор: Drizhenko 13.1.2006, 09:36
Ничего не понимаю, что за фигня такая. Код Guedda работает, но изминения в ini файле не происходит, хотя окно появляется там же где и исчезло.

Автор: Albinos_x 13.1.2006, 09:54
Цитата(Drizhenko @ 13.1.2006, 09:36 Найти цитируемый пост)

Ничего не понимаю, что за фигня такая. Код Guedda работает, но изминения в ini файле не происходит, хотя окно появляется там же где и исчезло.

может ты не тот ини смотришь.... может ты его где-нибудь в другой папке разместил...

Автор: Drizhenko 13.1.2006, 10:02
Вроде разобрался. Глюк с этой строкой
Код
IniFile := TIniFile.Create('MyIniFile.ini'); //пытаемся подгрузить файл

Написал так
Код

 IniFile := TIniFile.Create(extractfilepath(Application.ExeName)+'\MyIniFile.ini');

Заработало.

Автор: Guedda 13.1.2006, 10:07
Цитата(Drizhenko @ 13.1.2006, 10:02)
Вроде разобрался. Глюк с этой строкой
Код
IniFile := TIniFile.Create('MyIniFile.ini'); //пытаемся подгрузить файл

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

Автор: Albinos_x 13.1.2006, 10:16
Цитата(Guedda @ 13.1.2006, 10:07 Найти цитируемый пост)

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

он видно имел ввиду, что поэтому файл который он хотел не изменялся...

Автор: Guedda 13.1.2006, 10:20
Да... Он по ходу создал ручками файл в своей директории, а писал просто...
Вот ничего и не изменялось.

Автор: F1reF0x 13.1.2006, 12:40
Сохраняй в реестре. Имхо реестр удобней чем ini файлы, т.к всё в одном месте.

Код

uses Registry;

var
  Reg: TRegIniFile;
Begin
  Reg:= TRegIniFile.Create('Software');
  Reg.WriteString('MyProgram', 'Test', 'Test'); // 1 параметр раздел, 2 заголовк ключа, 3 данные ключа.
  Reg.ReadString('MуProgram', 'Test', 'No data'); //  1 параметр раздел, 2 заголовк ключа, если ничего нету
  Reg.Free;
End;

Автор: Albinos_x 13.1.2006, 12:45
у реестра есть один недостаток, если прога будет работать в НТ-клонах винды из под юзера с ограниченными правами, то нифига сохраняться в реестр не будет...

Автор: _hunter 13.1.2006, 13:53
для этого есть улей current_user
+ на NT-клонах винды из под юзера с ограниченными правами, и в файл нифига сохраняться не будет...

Автор: Albinos_x 13.1.2006, 18:16
Цитата(_hunter @ 13.1.2006, 13:53 Найти цитируемый пост)

и в файл нифига сохраняться не будет...

смотря в какой файл...

Автор: _hunter 13.1.2006, 18:49
если убрать права на запись со всех дисков то в любой...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)