![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как работает assignfile [D6, XP]
Alex4555 © (2009-10-12 15:34:00)Добрый....
есть проседура
procedure MakeLog (const A, FileName : String);
var
savefile : Text;
begin
assignfile (savefile,filename);
if not fileexists (filename) then rewrite (savefile) else append (savefile);
writeln (savefile,datetimetostr (now)+' '+pmessage);
closefile (savefile);
end;
filename - вида "log.txt"
Запустили программу. В Рабочем каталоге соответственно создается файл log.txt с логом
но если в программе где то вызыватся диалог сохранения файла и осуществляется переход в какую то другую папку то впоследствии Лог-файл уже пишется в этой папке.
Что это? - изменение рабочего каталога программы ? или ???
Где тут неувязка?
Anatoly Podgoretsky (2009-10-12 21:46:00) [1]Ну точно не программистом, он даже вопрос не может оформить, спрашивает про одно, объясняет другое, а речь идет о третьем, о поведение диалога, а проблема в относительных путях.
Ладно ответим на вопрос - assignfile просто записывает указаное имя в поле файловой переменной и ничего более.
Более того туда можно писать любую ерунду, ошибки не будет, лишь бы была совместимость по типу, а содержимое никак не проверяется.
Плохиш (2009-10-12 21:38:00) [2]
> Kolan © (12.10.09 18:21) [4]
>
>
> > надо указать опцию ofNoChangeDir у TOpenDialog
>
> Несогласен, это изменит привычное поведение диалога и когда
> пользователь захочет открыть еще один файл из той же папки,
> ему придется снова путешествовать по файловой системе.
Я не понял, тут обсуждается программа, создаваемая программистом или сантехником?
Игорь Шевченко (2009-10-12 18:41:00) [3]
> Несогласен, это изменит привычное поведение диалога и когда
> пользователь захочет открыть еще один файл из той же папки,
> ему придется снова путешествовать по файловой системе.
Откуда нам дано знать, что есть привычно для пользователя и как он выполняет свои задачи ?
Правилом хорошего тона является запоминание последнего выбранного файла и при повторном открытии диалога установка в тот же каталог. Смена же каталога в результате навигации при открытии потребует больше усилий от программиста, следовательно, будет допущено больше ошибок.
Leonid Troyanovsky (2009-10-12 18:29:00) [4]
> Kolan © (12.10.09 18:21) [4]
> Несогласен
А я несогласен с FileExists.
--
Regards, LVT.
Медвежонок Пятачок (2009-10-12 18:29:00) [5]ему придется снова путешествовать по файловой системе.
это если он на ископаемой оси сидит.
Kolan (2009-10-12 18:21:00) [6]
> надо указать опцию ofNoChangeDir у TOpenDialog
Несогласен, это изменит привычное поведение диалога и когда пользователь захочет открыть еще один файл из той же папки, ему придется снова путешествовать по файловой системе.
Игорь Шевченко (2009-10-12 18:10:00) [7]
> но если в программе где то вызыватся диалог сохранения файла
> и осуществляется переход в какую то другую папку
то в программе надо указать опцию ofNoChangeDir у TOpenDialog
RWolf (2009-10-12 15:40:00) [8]текущий каталог меняется.
Kolan (2009-10-12 15:40:00) [9]Использовав диалог сохранения файла вы сменили рабочий каталог. Используйте полный путь (см. ParamStr(0)) и проблем не будет.
Более того создавать файлы рядом с программой опасно. Если она будет лежать в Програм Файлс на это может не быть прав.
Замечания по коду
>if not fileexists (filename) then rewrite (savefile) else append (savefile);
Забавно. Почему не наоборот
if FileExists(filename) then
Append(savefile)
else
Rewrite(savefile);
Еще вы забыли проtry finally.