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

Вниз

Файл уже открыт 107   Найти похожие ветки 

 
bam ©   (2011-11-08 13:35) [0]

Добрый день.
Я - студент.
Выполняю лабу по ООП. Никак не могу получить ошибку 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 уважением, Андрей.


 
MBo ©   (2011-11-08 13:42) [1]

Справка по EInOutError Class всё объясняет


 
MBo ©   (2011-11-08 13:46) [2]

>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  для данного случая нет в списке


 
Inovet ©   (2011-11-08 14:03) [3]

> [2] MBo ©   (08.11.11 13:46)
> но 107  для данного случая нет в списке

Да и название ошибки странное - "файл уже открыт", это же то же самое "Ошибка совместного доступа" должно быть.


 
bammy   (2011-11-08 14:09) [4]

Выполнял в Delphi2009. Создавал new VCL Form Project.
Откуда в нем может быть CLX?
103 и 104 ошибки генерились...
А как получить 107. 107 - File already open.
Вот вопросец....


 
sniknik ©   (2011-11-08 14:50) [5]

нужно перестать пользоваться функциями дельфи... и писать на 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 15:46) [6]

Сегодня попробую - thank"s!


 
han_malign   (2011-11-09 08:52) [7]

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;



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
15-1320263467
GreyWolf83
2011-11-02 22:51
2012.02.19
UTF-8 сравнение строк без учета регистра???


15-1319778083
prestig
2011-10-28 09:01
2012.02.19
файл hosts


2-1320822681
Fr
2011-11-09 11:11
2012.02.19
FlashWindow


2-1320786460
I
2011-11-09 00:07
2012.02.19
Компиляция в командной строке


2-1320310497
Laguna
2011-11-03 11:54
2012.02.19
Предосмотр картинки на форме