(Pascal) работа с файлами

shs777

Member
Joined
Dec 13, 2006
Messages
30
Reaction score
1
Location
Moscow
Доброго времени суток.

написал я procedure shs_fileexists;
var
f2:textfile;
begin
assignfile(f2,'currentprj.txt');
if not fileexists('currentprj.txt') then
begin
Rewrite(f2);
Append(f2);
CloseFile(f2);
end;
end;

Вчера заметил багу. Файл currentprj.txt существовал и был наполнен информацией. А сегодня ____ и нету информации в филе.
Не могу понять в чем дело. В моей программе только эта процедура может сей файл перезаписать, но условие же не должно было выполниться потому что файл существовал. Непонимаю почему он перезаписался.

Есть версия что он перезаписался из-за того что хранится в директории Application Data, но это маловероятно. Директория как директория...

Помогите понять ошибку. Спасибо.
 

Ognev

ex-Team DUMPz
Joined
Aug 20, 2018
Messages
2,104
Reaction score
902
Age
25
Конкретно этот кусок кода ничего с уже существующим файлом не делает. Либо баг в другом месте, либо в исходниках этот кусок записан как-то иначе )))
 

shs777

Member
Joined
Dec 13, 2006
Messages
30
Reaction score
1
Location
Moscow
в остальных частях программы только вызовы на сохранение этого файла(сначала вызов этой процедуры, затем сохранение). Может из-за того, что я рано применяю assignfile(f2,'currentprj.txt'); к нему блокируется доступ и программе кажется что его нет? А т.к он уже ассоциирован с переменной, то поэтому и прокатывает исключение? Так быть не может?
 

Ognev

ex-Team DUMPz
Joined
Aug 20, 2018
Messages
2,104
Reaction score
902
Age
25
Как написано в хелпе, assignfile лишь инициализирует переменную и асоциирует ее с определенным файлом. Больше ничего. Единственное, есть в хелпе такая строчка:
Do not use AssignFile on a file variable that is already open.
Других ограничений вроде нет. Хелп к Delphi 2007.
 

shs777

Member
Joined
Dec 13, 2006
Messages
30
Reaction score
1
Location
Moscow
Нашел ошибку. Действительно данная процедура не виновата. У меня баг вылазил при старте программы. Я не все переменные инициализировал. А проге пофиг если файл есть она его перезапишет\сделает бекап. А на самом деле при старте текстовые поля все пустые. Таким же становился файл бекапа :)

Короче пофиксил, а Вам спасибо за помощь.
 
Last edited by a moderator:
Top