--- oup/current/DataAccess/Access_OniArchive.pas 2007/05/02 13:19:40 173 +++ oup/current/DataAccess/Access_OniArchive.pas 2007/06/04 22:07:29 209 @@ -15,9 +15,10 @@ type FDatOpened: Boolean; FRawOpened: Boolean; FSepOpened: Boolean; + procedure SetUnloadWhenUnused(doit: Boolean); protected public - property UnloadWhenUnused: Boolean Read FUnloadWhenUnused Write FUnloadWhenUnused; + property UnloadWhenUnused: Boolean Read FUnloadWhenUnused Write SetUnloadWhenUnused; constructor Create(DatFilename: String; ConnectionID: Integer; var Msg: TStatusMessages); override; procedure Close; override; @@ -52,7 +53,7 @@ type implementation uses - SysUtils, StrUtils, Data, Functions, RawList, DatLinks; + SysUtils, StrUtils, Data, Functions, RawList, DatLinks, Math; (* @@ -164,6 +165,53 @@ end; +procedure TAccess_OniArchive.SetUnloadWhenUnused(doit: Boolean); +begin + FUnloadWhenUnused := doit; + if FUnloadWhenUnused then + begin + if FDatOpened then + begin + FDatOpened := False; + Fdat_file.Free; + end; + if FRawOpened then + begin + FRawOpened := False; + Fraw_file.Free; + end; + if FSepOpened then + begin + FSepOpened := False; + Fsep_file.Free; + end; + end + else + begin + if not FDatOpened then + begin + Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); + FDatOpened := True; + end; + if not FRawOpened then + begin + Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), + fmOpenReadWrite); + FRawOpened := True; + end; + if (not FSepOpened) and (FDataOS <> DOS_WIN) then + begin + Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), + fmOpenReadWrite); + FSepOpened := True; + end; + end; +end; + + + + + procedure TAccess_OniArchive.Close; begin if FDatOpened then @@ -559,7 +607,7 @@ begin Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), fmOpenReadWrite); Fraw_file.Seek(raw_info.RawAddr, soFromBeginning); - Fraw_file.CopyFrom(Src, raw_info.RawSize); + Fraw_file.CopyFrom(Src, Min(raw_info.RawSize, Src.Size)); if UnloadWhenUnused then begin FRawOpened := False;