首页 / 软件开发 / Delphi / 第十二章-异常处理与程序调试(一)(6)
第十二章-异常处理与程序调试(一)(6)2007-05-0712.2.2 产生一个资源保护块 Delphi提供了一个保留字finally,用于实现资源的保护: {分配资源}try{资源使用情况}finally{释放资源}end; try…finally…end就形成了一个资源保护块。finally后面的语句是在任何情况下,不论程序是否发生异常,都会执行的。对于(12.2.1)中的例子如下代码即可确保所分配内存资源的释放: varAPointer : Pointer ;AInt , ADiv : Integer;beginADiv := 0;GetMem ( APointer , 1024 );tryAInt := 10 div ADiv ;finallyFreeMem ( Apointer , 1024 );end;end; 下面的例子摘自(6.4)节,是在文件拷贝中实现文件资源的保护: procedure CopyFile(const FileName, DestName: TFileName);varCopyBuffer: Pointer; TimeStamp, BytesCopied: Longint;Source, Dest: Integer; Destination: TFileName; constChunkSize: Longint = 8192; beginDestination := ExpandFileName(DestName); if HasAttr(Destination, faDirectory) then Destination := Destination + "" + ExtractFileName(FileName); TimeStamp := FileAge(FileName); GetMem(CopyBuffer, ChunkSize); trySource := FileOpen(FileName, fmShareDenyWrite); if Source < 0 then raise EFOpenError.Create(FmtLoadStr(SFOpenError, [FileName]));tryDest := FileCreate(Destination); if Dest < 0 then raise EFCreateError.Create(FmtLoadStr(SFCreateError, [Destination]));tryrepeatBytesCopied := FileRead(Source, CopyBuffer^, ChunkSize); if BytesCopied > 0 then FileWrite(Dest, CopyBuffer^, BytesCopied); until BytesCopied < ChunkSize; finallyFileClose(Dest); end;finallyFileClose(Source); end;finallyFreeMem(CopyBuffer, ChunkSize); end;end;程序的具体解释见 (6.4)节。在异常保护的情况下,当异常发生时,系统会自动弹出一个消息框用于显示异常的消息。退出当前模块后异常类自动清除。