Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];

Вниз

Как работает 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
15-1254397935
картман
2009-10-01 15:52
2009.11.29
окно CPU


2-1255601111
xyz
2009-10-15 14:05
2009.11.29
где ошибка в запросе?


1-1226938293
burbuluc
2008-11-17 19:11
2009.11.29
Как выйти из ступора?


3-1230124390
interbase
2008-12-24 16:13
2009.11.29
без sp_executeSQL не обойтись?


2-1255523378
Сергей
2009-10-14 16:29
2009.11.29
Показать строку в StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский