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

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

Exception при записи файла в недоступную для записи папку


Страницы:   1 2

User ©   (2010-05-29 09:00:00) 

Какой Exception активируется, если попытаться записать файл в недоступную для записи папку.


Плохиш   (2010-05-30 16:51:00) [21]


> except
>  on classes.EWriteError do ShowMessage('Some error text')
> else
> end;
>
>

Я бы убил.


Anatoly Podgoretsky   (2010-05-30 09:32:00) [22]

> бумбум  (30.05.2010 07:38:09)  [9]

А вопрос то про доступность папки, а не про наличие.


бумбум   (2010-05-30 07:38:00) [23]

Исходя из задачи непросто ли проверить сушествования пути каталога:
If not DirectoryExists('Z:\') then
ShowMessage('Net papki');


Loginov Dmitry   (2010-05-29 22:26:00) [24]


> Я выбрал несуществующий на моем компьютере путь 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.


User   (2010-05-29 20:35:00) [25]


> Anatoly Podgoretsky

Да, наверно лучше так.


Anatoly Podgoretsky   (2010-05-29 20:32:00) [26]

> User  (29.05.2010 20:24:05)  [5]


except
  ShowMessage('Some error text') else
end;


User   (2010-05-29 20:24:00) [27]

Прошу прощения, оказалось, что и это не то, что мне нужно. Приведу кусок кода:

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 при попытке записи или нет.

К сожалению он не вызывается. Что не так в коде?


User   (2010-05-29 20:16:00) [28]

EFCreateError - вот что мне требовалось узнать.


Anatoly Podgoretsky   (2010-05-29 10:57:00) [29]

> Омлет  (29.05.2010 10:45:02)  [2]

Так отладчик сразу покажет.


Омлет   (2010-05-29 10:45:00) [30]

Кем активируется?

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;


_Юрий   (2010-05-29 09:34:00) [31]

Получение ответа на этот вопрос эмпирическим путем занимает меньше времени, чем публикация вопроса на форуме :-)


Страницы:   1 2

Наверх

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