Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.29;
Скачать: CL | DM;

Вниз

Как работает assignfile   Найти похожие ветки 

 
Alex4555   (2009-10-12 15:34) [0]

Добрый....
есть проседура
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    с логом

но если в программе где то вызыватся диалог сохранения файла и осуществляется переход  в какую то другую папку  то впоследствии Лог-файл уже пишется в этой папке.
Что это? - изменение рабочего каталога программы ? или ???
Где тут неувязка?


 
RWolf ©   (2009-10-12 15:40) [1]

текущий каталог меняется.


 
Kolan ©   (2009-10-12 15:40) [2]

Использовав диалог сохранения файла вы сменили рабочий каталог. Используйте полный путь (см. ParamStr(0)) и проблем не будет.

Более того создавать файлы рядом с программой опасно. Если она будет лежать в Програм Файлс на это может не быть прав.

Замечания по коду
>if not fileexists (filename) then rewrite (savefile) else append (savefile);
Забавно. Почему не наоборот
if FileExists(filename) then
   Append(savefile)
 else
   Rewrite(savefile);


Еще вы забыли про try finally.


 
Игорь Шевченко ©   (2009-10-12 18:10) [3]


> но если в программе где то вызыватся диалог сохранения файла
> и осуществляется переход  в какую то другую папку  


то в программе надо указать опцию ofNoChangeDir у TOpenDialog


 
Kolan ©   (2009-10-12 18:21) [4]


> надо указать опцию ofNoChangeDir у TOpenDialog

Несогласен, это изменит привычное поведение диалога и когда пользователь захочет открыть еще один файл из той же папки, ему придется снова путешествовать по файловой системе.


 
Leonid Troyanovsky ©   (2009-10-12 18:29) [5]


> Kolan ©   (12.10.09 18:21) [4]

> Несогласен

А я несогласен с FileExists.

--
Regards, LVT.


 
Медвежонок Пятачок ©   (2009-10-12 18:29) [6]

ему придется снова путешествовать по файловой системе.

это если он на ископаемой оси сидит.


 
Игорь Шевченко ©   (2009-10-12 18:41) [7]


> Несогласен, это изменит привычное поведение диалога и когда
> пользователь захочет открыть еще один файл из той же папки,
>  ему придется снова путешествовать по файловой системе.


Откуда нам дано знать, что есть привычно для пользователя и как он выполняет свои задачи ?
Правилом хорошего тона является запоминание последнего выбранного файла и при повторном открытии диалога установка в тот же каталог. Смена же каталога в результате навигации при открытии потребует больше усилий от программиста, следовательно, будет допущено больше ошибок.


 
Плохиш ©   (2009-10-12 21:38) [8]


> Kolan ©   (12.10.09 18:21) [4]
>
>
> > надо указать опцию ofNoChangeDir у TOpenDialog
>
> Несогласен, это изменит привычное поведение диалога и когда
> пользователь захочет открыть еще один файл из той же папки,
>  ему придется снова путешествовать по файловой системе.

Я не понял, тут обсуждается программа, создаваемая программистом или сантехником?


 
Anatoly Podgoretsky ©   (2009-10-12 21:46) [9]

Ну точно не программистом, он даже вопрос не может оформить, спрашивает про одно, объясняет другое, а речь идет о третьем, о поведение диалога, а проблема в относительных путях.

Ладно ответим на вопрос - assignfile просто записывает указаное имя в поле файловой переменной и ничего более.
Более того туда можно писать любую ерунду, ошибки не будет, лишь бы была совместимость по типу, а содержимое никак не проверяется.



Страницы: 1 вся ветка

Текущий архив: 2009.11.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
15-1254145596
Дмитрий Белькевич
2009-09-28 17:46
2009.11.29
Вопрос по поап меню


15-1254379545
@!!ex
2009-10-01 10:45
2009.11.29
Помогите с оплатой счета по PayPal


1-1226044253
checkmate-maker
2008-11-07 10:50
2009.11.29
Динамическое подключение DLL


2-1255358930
Nutz
2009-10-12 18:48
2009.11.29
Визуальное отбражение кода


15-1252418473
Наиль
2009-09-08 18:01
2009.11.29
Кому Windows XP бесплатно?