Текущий архив: 2010.08.27;
Скачать: CL | DM;
ВнизException при записи файла в недоступную для записи папку Найти похожие ветки
← →
User (2010-05-29 09:00) [0]Какой Exception активируется, если попытаться записать файл в недоступную для записи папку.
← →
_Юрий © (2010-05-29 09:34) [1]Получение ответа на этот вопрос эмпирическим путем занимает меньше времени, чем публикация вопроса на форуме :-)
← →
Омлет © (2010-05-29 10:45) [2]Кем активируется?
constructor TFileStream.Create(const FileName: string; Mode: Word; Rights: Cardinal);
begin
if Mode = fmCreate then
begin
inherited Create(FileCreate(FileName, Rights));
if FHandle < 0 then
raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
end
else
begin
inherited Create(FileOpen(FileName, Mode));
if FHandle < 0 then
raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
end;
end;
← →
Anatoly Podgoretsky © (2010-05-29 10:57) [3]> Омлет (29.05.2010 10:45:02) [2]
Так отладчик сразу покажет.
← →
User (2010-05-29 20:16) [4]EFCreateError - вот что мне требовалось узнать.
← →
User (2010-05-29 20:24) [5]Прошу прощения, оказалось, что и это не то, что мне нужно. Приведу кусок кода:
try
with TIniFile.Create("Z:\Settings.ini") do
try
WriteInteger("Application", "FormLeft", Form1.Left);
WriteInteger("Application", "FormTop", Form1.Top);
finally
Free;
end;
except
on classes.EWriteError do ShowMessage("Some error text") else
end;
Я выбрал несуществующий на моем компьютере путь Z:\..., чтобы проверить, вызовется ли EWriteError при попытке записи или нет.
К сожалению он не вызывается. Что не так в коде?
← →
Anatoly Podgoretsky © (2010-05-29 20:32) [6]> User (29.05.2010 20:24:05) [5]
except
ShowMessage("Some error text") else
end;
← →
User (2010-05-29 20:35) [7]
> Anatoly Podgoretsky
Да, наверно лучше так.
← →
Loginov Dmitry © (2010-05-29 22:26) [8]
> Я выбрал несуществующий на моем компьютере путь Z:\...,
> чтобы проверить, вызовется ли EWriteError при попытке записи
> или нет.
>
> К сожалению он не вызывается. Что не так в коде?
А почему он должен вызываться? Кто-то это обещал?
Вот выдержка из исходников:procedure TIniFile.WriteString(const Section, Ident, Value: string);
begin
if not WritePrivateProfileString(PChar(Section), PChar(Ident),
PChar(Value), PChar(FFileName)) then
raise EIniFileException.CreateResFmt(@SIniFileWriteError, [FileName]);
end;
Как видно, причину ошибку тут понять нельзя. Обертка TIniFile весьма несовершенна.
Выяснить причину ошибки позволяет GetLastError.
← →
бумбум (2010-05-30 07:38) [9]Исходя из задачи непросто ли проверить сушествования пути каталога:
If not DirectoryExists("Z:\") then
ShowMessage("Net papki");
← →
Anatoly Podgoretsky © (2010-05-30 09:32) [10]> бумбум (30.05.2010 07:38:09) [9]
А вопрос то про доступность папки, а не про наличие.
← →
Плохиш © (2010-05-30 16:51) [11]
> except
> on classes.EWriteError do ShowMessage("Some error text")
> else
> end;
>
>
Я бы убил.
← →
Юрий Зотов © (2010-05-30 20:21) [12]> User (29.05.10 20:24) [5]
try
...
except
on e: Exception do
begin
ShowMessage(e.ClassName);
raise
end
end;
← →
Германн © (2010-05-31 03:02) [13]
> Юрий Зотов © (30.05.10 20:21) [12]
А зачем после @ShowMessage(e.ClassName);
raise?
← →
Anatoly Podgoretsky © (2010-05-31 06:59) [14]Чтобы продолжить обработку ошибки.
> Я бы убил.
Тут нужно уточнение
← →
Юрий Зотов © (2010-05-31 08:31) [15]
> Германн © (31.05.10 03:02) [13]
Иначе Плохиш убьет. И правильно сделает.
← →
12 © (2010-05-31 09:04) [16]
> except
> on e: Exception do
> begin
> ShowMessage(e.ClassName);
> raise
> end
> end;
сколько смотрю - и всегда замечаю
как Вам всегда удается точку с запятой не ставить там, где ее можно не ставить? 6)
← →
Anatoly Podgoretsky © (2010-05-31 09:20) [17]> 12 (31.05.2010 09:04:16) [16]
Надеюсь Юрий не убьет :-)
Точку с запятой можно не ставить перед END
← →
RWolf © (2010-05-31 09:29) [18]
> как Вам всегда удается точку с запятой не ставить там, где
> ее можно не ставить?
я тут у кого-то видел код, где точки с запятой стояли даже после begin.
← →
12 © (2010-05-31 09:34) [19]дык я знаю, просто как об этом можно всегда помнить?!
ваш покорный, например, на автомате ; после строки ставит..
← →
Омлет © (2010-05-31 09:59) [20]Раньше винчестеры были небольшие, приходилось байты экономить ))
← →
RWolf © (2010-05-31 10:50) [21]
> 12 © (31.05.10 09:34) [19]
это потому, что вы воспринимаете точку с запятой, как завершение оператора, тогда как она — разделитель.
← →
RWolf © (2010-05-31 10:54) [22]впрочем, точка с запятой в конце каждого оператора таки удобнее — дописывая новую строку перед end, не нужно возвращаться на предыдущую, чтобы поставить запятую.
← →
Anatoly Podgoretsky © (2010-05-31 11:50) [23]> 12 (31.05.2010 09:34:19) [19]
И перед ELSE?
← →
Anatoly Podgoretsky © (2010-05-31 11:51) [24]> RWolf (31.05.2010 10:54:22) [22]
Провоцируешь? На holly war
← →
Loginov Dmitry © (2010-05-31 11:53) [25]Дельфяк точку с запятой сам дописывает. Так нафига ее удалять? :)
← →
12 © (2010-05-31 11:57) [26]
> Anatoly Podgoretsky © (31.05.10 11:50) [23]
>
> > 12 (31.05.2010 09:34:19) [19]
>
> И перед ELSE?
часто :)
потом стираю
← →
Омлет © (2010-05-31 12:11) [27]Кстати, зачем перед else нужна ; ?
В javascript, php и т.п. мешает паскалевская привычка не ставить ; перед else.
← →
Омлет © (2010-05-31 12:13) [28]> Кстати, зачем перед else нужна ; ?
Читать так: почему в Паскале перед else не должно быть точки с запятой.
← →
12 © (2010-05-31 12:22) [29]логическое условие отделяется ?
← →
Anatoly Podgoretsky © (2010-05-31 12:28) [30]> Омлет (31.05.2010 12:13:28) [28]
Так Вирт решил, раньше и перед END нельзя было, а в какой то версии TP это
ограничение сняли и теперь не совсем логично.
← →
grammar-nazi (2010-05-31 14:52) [31]
> Так Вирт решил, раньше и перед END нельзя было, а в какой то версии TP это
> ограничение сняли и теперь не совсем логично.
там и у вирта не совсем логично было. например, в описании структур после последнего члена точка с запятой разрешалась (хоть и не была обязательной). в тоже время пустые члены (несколько точек с запятой подряд) не разрешались.
Страницы: 1 вся ветка
Текущий архив: 2010.08.27;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.067 c