![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Файл уже открыт 107
bam © (2011-11-08 13:35:00)Добрый день.
Я - студент.
Выполняю лабу по ООП. Никак не могу получить ошибку 107.
Задание звучит так:
try
. . .
except
on E:EInOutError do
case E.ErrorCode of
2:MessageDlg(‘Файл не найден!’, mtWarning, [mbOk], 0);
3:MessageDlg(‘Путь не найден!’, mtWarning, [mbOk], 0);
32:MessageDlg(‘Ошибка совместного доступа!’, mtWarning,
[mbOk], 0);
107:MessageDlg(‘Файл уже открыт!’, mtWarning, [mbOk], 0);
end;
end;
Смоделируйте данные виды ошибок ввода/вывода.
Ошибку 2 получить проще лёхкого, нужно всего лишь при открытии файла на чтение ошибиться в названии файла.
Ошибку 3 также получить лехко - нужно ошибиться в пути при открытии файла на чтение.
Ошибку 32 также несложно получить - нужно открыть файл на чтение и на запись.
А вот как получить ошибку 107, какие манипуляции нужно проделать с текстовым или другим файлом, чтобы 107 все-таки появилась на свет??
p.s. Ошибки после 100-й я получал(103 и 104). Проект на VCL.
Заранее премного благодарен откликнувшимся добрым русским людям.
--
C уважением, Андрей.
han_malign (2011-11-09 08:52:00) [1]System.pas:
procedure SetLineBreakStyle(var T: Text; Style: TTextLineBreakStyle);
begin
if TTextRec(T).Mode = fmClosed then
TTextRec(T).Flags := (TTextRec(T).Flags and not tfCRLF) or (tfCRLF * Byte(Style))
else
SetInOutRes(107); // can't change mode of open file
end;
bammy (2011-11-08 15:46:00) [2]Сегодня попробую - thank's!
sniknik (2011-11-08 14:50:00) [3]нужно перестать пользоваться функциями дельфи... и писать на winAPI
{ Create I/O exception }
function CreateInOutError: EInOutError;
type
TErrorRec = record
Code: Integer;
Ident: string;
end;
const
ErrorMap: array[0..6] of TErrorRec = (
(Code: 2; Ident: SFileNotFound),
(Code: 3; Ident: SInvalidFilename),
(Code: 4; Ident: STooManyOpenFiles),
(Code: 5; Ident: SAccessDenied),
(Code: 100; Ident: SEndOfFile),
(Code: 101; Ident: SDiskFull),
(Code: 106; Ident: SInvalidInput));
var
I: Integer;
InOutRes: Integer;
begin
I := Low(ErrorMap);
InOutRes := IOResult; // resets IOResult to zero
while (I <= High(ErrorMap)) and (ErrorMap[I].Code <> InOutRes) do Inc(I);
if I <= High(ErrorMap) then
Result := EInOutError.Create(ErrorMap[I].Ident) else
Result := EInOutError.CreateResFmt(@SInOutError, [InOutRes]);
Result.ErrorCode := InOutRes;
end;
дельфи часть обрабатывает не допуская до этих ошибок
bammy (2011-11-08 14:09:00) [4]Выполнял в Delphi2009. Создавал new VCL Form Project.
Откуда в нем может быть CLX?
103 и 104 ошибки генерились...
А как получить 107. 107 - File already open.
Вот вопросец....
Inovet (2011-11-08 14:03:00) [5]> [2] MBo © (08.11.11 13:46)
> но 107 для данного случая нет в списке
Да и название ошибки странное - "файл уже открыт", это же то же самое "Ошибка совместного доступа" должно быть.
MBo (2011-11-08 13:46:00) [6]>p.s. Ошибки после 100-й я получал(103 и 104). Проект на VCL.
странно, учитывая
Error codes in the range 100 to 149 represent error conditions raised by CLX.
Ошибки 100-106 можно получить через IOResult при использовании соотв. директивы {$I-} , но 107 для данного случая нет в списке
MBo (2011-11-08 13:42:00) [7]Справка по EInOutError Class всё объясняет