diff --git a/src/shared/utils.pas b/src/shared/utils.pas
index a854ca45bc922f155465ed98a32daad0710ced8c..215e60a8115bfb5373da9329867f78804a001139 100644 (file)
--- a/src/shared/utils.pas
+++ b/src/shared/utils.pas
// they throws
function openDiskFileRO (pathname: AnsiString): TStream;
function createDiskFile (pathname: AnsiString): TStream;
+// creates file if necessary
+function openDiskFileRW (pathname: AnsiString): TStream;
// little endian
procedure writeSign (st: TStream; const sign: AnsiString);
end;
+function openDiskFileRW (pathname: AnsiString): TStream;
+var
+ path: AnsiString;
+ oldname: AnsiString;
+begin
+ //writeln('*** TRYING R/W FILE "', pathname, '"');
+ path := ExtractFilePath(pathname);
+ if length(path) > 0 then
+ begin
+ if not findFileCI(path, true) then raise Exception.Create('can''t create file "'+pathname+'"');
+ end;
+ oldname := pathname;
+ if findFileCI(oldname) then
+ begin
+ //writeln('*** found old file "', oldname, '"');
+ result := TFileStream.Create(oldname, fmOpenReadWrite or fmShareDenyWrite);
+ end
+ else
+ begin
+ result := TFileStream.Create(path+ExtractFileName(pathname), fmCreate);
+ end;
+end;
+
+
procedure writeIntegerLE (st: TStream; vp: Pointer; size: Integer);
{$IFDEF ENDIAN_LITTLE}
begin