![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись в ini файл
Pavelnk © (2015-05-21 15:05:00)У меня в программе пользовательские настройки записываются в ini файл. Пишется всё нормально. Но потом программа мне пишет, что не моет получить доступ к ini файлу, так как он занят другим процессом. Что делать?
procedure TForm1.RadioButton4Click(Sender: TObject);
var
f:TStringList;
a:integer;
begin
f:=TStringList.Create();
f.LoadFromFile('nastr.ini');
a:=f.Count;
f.Strings[6]:='0';
f.SaveToFile('nastr.ini');
f.free;
end;
Pavelnk (2015-05-21 17:15:00) [1]Да, всё работает, всё ок) спасибо.
Pavelnk (2015-05-21 16:58:00) [2]> кгшзх © (21.05.15 16:53) [15]
> Прочитай при старте, сохрани при выходе.
о. идея)
кгшзх (2015-05-21 16:53:00) [3]Зачем дергать дисковый файл внутри RadioButton4 Click?
Прочитай при старте, сохрани при выходе.
Pavelnk (2015-05-21 16:41:00) [4]Тогда я по прежнему ничего не понимаю. Что за процесс держит nastr.ini после f.SaveToFile('nastr.ini').
кгшзх (2015-05-21 16:34:00) [5]Или нет, он то работает, то не работает.
Он не работает вообще. Достаточно заглянуть в исходники LoadFromFile и SaveToFile
С таким же успехом в промежутке между сохранением и чтением можно менять капшен какой-нибудь кнопки.
И тоже самое будет.
Иногда это будет помогать, а иногда нет. Потому что к проблеме ни то ни это никак не относится.
Pavelnk (2015-05-21 16:11:00) [6]Или нет, он то работает, то не работает.
Pavelnk (2015-05-21 15:58:00) [7]А совет сработал! -
procedure TForm1.RadioButton3Click(Sender: TObject);
var
f:TStringList;
a:integer; h: thandle;
begin
f:=TStringList.Create();
f.LoadFromFile('nastr.ini');
a:=f.Count;
f.Strings[6]:='1';
h := FileCreate(ExtractFilePath(Application.ExeName)+'/nastr.ini');
if h <> INVALID_HANDLE_VALUE then closehandle(h);
f.SaveToFile('nastr.ini');
f.free;
end;
кгшзх (2015-05-21 15:55:00) [8]Почитал кое что, нашёл такой странный совет -
можно просто закрыть хэндл (если он более не нужен)
var h: thandle;
begin
h := FileCreate(ExtractFilePath(Application.ExeName)+'/base/admins.txt');
Pavelnk (2015-05-21 15:53:00) [9]> кгшзх © (21.05.15 15:47) [8]
> зачем тебе файлкриэйт,
Вот это особенно не понял, где там файлкриэйт?
кгшзх (2015-05-21 15:47:00) [10]привет, землянин.
зачем тебе файлкриэйт, если вызывается лоадфромфайл?
пишем программу путем случайных комбинаций знакомых слов?
Pavelnk (2015-05-21 15:44:00) [11]Почитал кое что, нашёл такой странный совет -
можно просто закрыть хэндл (если он более не нужен)
var h: thandle;
begin
h := FileCreate(ExtractFilePath(Application.ExeName)+'/base/admins.txt');
...
if h <> INVALID_HANDLE_VALUE then closehandle(h);
...
richedit1.Lines.LoadFromFile(Application.ExeName)+'/base/admins.txt');
end;
Pavelnk (2015-05-21 15:40:00) [12]> Token (21.05.15 15:30) [3]
> А TStringList это принципиально? А то есть TIniFile в модуле
> IniFiles,
Нет, вообщем не принципиально, но я что то не в курсе как этим TIniFile пользоваться.
Pavelnk (2015-05-21 15:37:00) [13]Вот именно, я не пойму что за процесс. Потом этот ини файл читается при запуске программы. И она сразу пишет что не может получить к нему доступ. Это значит какой то системный процесс? Я даже камп перезагрузил, всё равно пишет то же самое.
кгшзх (2015-05-21 15:33:00) [14]StringList вроде free.
Написано же по-русски " другимпроцессом занято"
Token (2015-05-21 15:30:00) [15]Кхм... А TStringList это принципиально? А то есть TIniFile в модуле IniFiles, поудобнее будет и формат будет соблюдаться. А так надо поскать, что за процесс блокирует.
Pavelnk (2015-05-21 15:30:00) [16]> кгшзх © (21.05.15 15:17) [1]
> а угадай что надо делать если файл занят другим процессом
Что? Что то я не в курсе. Вообще эту ситуацию не пойму. StringList вроде free.
кгшзх (2015-05-21 15:17:00) [17]а угадай что надо делать если файл занят другим процессом