Index: oup/current/DataAccess/Access_OniArchive.pas
===================================================================
--- oup/current/DataAccess/Access_OniArchive.pas	(revision 229)
+++ oup/current/DataAccess/Access_OniArchive.pas	(revision 231)
@@ -370,19 +370,22 @@
   if fileid < GetFileCount then
   begin
-    if not Assigned(Target) then
-      Target := TMemoryStream.Create;
-    if not FDatOpened then
-      Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite);
-    Fdat_file.Seek(Fdat_files[fileid].DatAddr, soFromBeginning);
-    streampos := Target.Position;
-    Target.CopyFrom(Fdat_file, Fdat_files[fileid].Size);
-    Target.Seek(streampos, soFromBeginning);
-    if UnloadWhenUnused then
-    begin
-      Fdat_file.Free;
-      FDatOpened := False;
-    end
-    else
-      FDatOpened := True;
+    if GetFileInfo(FileID).Size > 0 then
+    begin
+      if not Assigned(Target) then
+        Target := TMemoryStream.Create;
+      if not FDatOpened then
+        Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite);
+      Fdat_file.Seek(Fdat_files[fileid].DatAddr, soFromBeginning);
+      streampos := Target.Position;
+      Target.CopyFrom(Fdat_file, Fdat_files[fileid].Size);
+      Target.Seek(streampos, soFromBeginning);
+      if UnloadWhenUnused then
+      begin
+        Fdat_file.Free;
+        FDatOpened := False;
+      end
+      else
+        FDatOpened := True;
+    end;
   end;
 end;
