Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизЗапись в ini файл Найти похожие ветки
← →
Pavelnk © (2015-05-21 15:05) [0]У меня в программе пользовательские настройки записываются в 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;
← →
кгшзх © (2015-05-21 15:17) [1]а угадай что надо делать если файл занят другим процессом
← →
Pavelnk © (2015-05-21 15:30) [2]> кгшзх © (21.05.15 15:17) [1]
> а угадай что надо делать если файл занят другим процессом
Что? Что то я не в курсе. Вообще эту ситуацию не пойму. StringList вроде free.
← →
Token (2015-05-21 15:30) [3]Кхм... А TStringList это принципиально? А то есть TIniFile в модуле IniFiles, поудобнее будет и формат будет соблюдаться. А так надо поскать, что за процесс блокирует.
← →
кгшзх © (2015-05-21 15:33) [4]StringList вроде free.
Написано же по-русски "другим процессом занято"
← →
Pavelnk © (2015-05-21 15:37) [5]Вот именно, я не пойму что за процесс. Потом этот ини файл читается при запуске программы. И она сразу пишет что не может получить к нему доступ. Это значит какой то системный процесс? Я даже камп перезагрузил, всё равно пишет то же самое.
← →
Pavelnk © (2015-05-21 15:40) [6]> Token (21.05.15 15:30) [3]
> А TStringList это принципиально? А то есть TIniFile в модуле
> IniFiles,
Нет, вообщем не принципиально, но я что то не в курсе как этим TIniFile пользоваться.
← →
Pavelnk © (2015-05-21 15:44) [7]Почитал кое что, нашёл такой странный совет -
можно просто закрыть хэндл (если он более не нужен)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;
← →
кгшзх © (2015-05-21 15:47) [8]привет, землянин.
зачем тебе файлкриэйт, если вызывается лоадфромфайл?
пишем программу путем случайных комбинаций знакомых слов?
← →
Pavelnk © (2015-05-21 15:53) [9]> кгшзх © (21.05.15 15:47) [8]
> зачем тебе файлкриэйт,
Вот это особенно не понял, где там файлкриэйт?
← →
кгшзх © (2015-05-21 15:55) [10]Почитал кое что, нашёл такой странный совет -
можно просто закрыть хэндл (если он более не нужен)
var h: thandle;
begin
h := FileCreate(ExtractFilePath(Application.ExeName)+"/base/admins.txt");
← →
Pavelnk © (2015-05-21 15:58) [11]А совет сработал! -
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;
← →
Pavelnk © (2015-05-21 16:11) [12]Или нет, он то работает, то не работает.
← →
кгшзх © (2015-05-21 16:34) [13]Или нет, он то работает, то не работает.
Он не работает вообще. Достаточно заглянуть в исходники LoadFromFile и SaveToFile
С таким же успехом в промежутке между сохранением и чтением можно менять капшен какой-нибудь кнопки.
И тоже самое будет.
Иногда это будет помогать, а иногда нет. Потому что к проблеме ни то ни это никак не относится.
← →
Pavelnk © (2015-05-21 16:41) [14]Тогда я по прежнему ничего не понимаю. Что за процесс держит nastr.ini после f.SaveToFile("nastr.ini").
← →
кгшзх © (2015-05-21 16:53) [15]Зачем дергать дисковый файл внутри RadioButton4Click ?
Прочитай при старте, сохрани при выходе.
← →
Pavelnk © (2015-05-21 16:58) [16]> кгшзх © (21.05.15 16:53) [15]
> Прочитай при старте, сохрани при выходе.
о. идея)
← →
Pavelnk © (2015-05-21 17:15) [17]Да, всё работает, всё ок) спасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.048 c