Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как работает 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 .


Наверх

Титульная страница Поиск, карта сайта Написать письмо