[delphizip] Re: Exclusive file access

  • From: "James Turner" <james.d.h.turner@xxxxxxxxxxxx>
  • To: <delphizip@xxxxxxxxxxxxx>
  • Date: Tue, 24 Sep 2002 15:07:22 +0100

I haven't tried what I'm about to suggest but I can think of no reason why
there should be a problem.

To prevent write access to zip file simple open it with FILE_SHARE_READ
access. This will prevent others from writing to the file. Before calling
the ZipMaster.Add function, you must call CloseHandle. When the
ZipMaster.Add function has completed, reopen the file with FILE_SHARE_READ
access.

If the ZipDLL allows shared write access (something I doubt) there could be
problems.

See Microsoft documentation on the API function CreateFile for more details.

This is not a perfect solution, but in practice should be ok. You should
also consider monitoring the file date - this is the approach I use to solve
a slightly different problem.

James Turner

PS
I have a feeling that it is possible to limit the instances of file sharing
under NT. This might be a better solution. The function LockFileEx may also
be useful.

----- Original Message -----
From: "Petko Kafedjiski" <kafedjiski@xxxxxxxxxxx>
To: <delphizip@xxxxxxxxxxxxx>
Sent: Tuesday, September 24, 2002 11:00 AM
Subject: [delphizip] Re: Exclusive file access


>
> Thank you very much Russell.
>
> I missed one thing: by doing, what you advice (iterating through all
> instances), I suspect that other instances run on other machines on the
> network can also overwrite the file, am I right?
>
> However, I have an idea and it is to create a temp file for every instance
> that opens the archive, so this will fix the problem to a given level.
>
> Regards,
> Petko Kafedjiski
> Milenix Software Ltd.
> http://www.milenix.com
>
> P.S.: I am sorry for my bad english :)
>
> ----- Original Message -----
> From: "Russell Peters" <russellpeters@xxxxxxxxxxx>
> To: <delphizip@xxxxxxxxxxxxx>
> Sent: Monday, September 23, 2002 11:58 PM
> Subject: [delphizip] Re: Exclusive file access
>
>
> >
> > This would be helped if I can add an AddTemp option (force add/modify to
a
> > temporary file), other than that the only way that comes to mind is to
> make
> > a temporary file (for each instance) to work on.
> > - Russell Peters
> > A late thought - it should be possible to iterate through all instances
> > checking ZipBusy and only writing if none busy.
> > Hope this helps.
> > ----- Original Message -----
> > From: "Petko Kafedjiski" <kafedjiski@xxxxxxxxxxx>
> > To: <delphizip@xxxxxxxxxxxxx>
> > Sent: Tuesday, September 24, 2002 4:15 AM
> > Subject: [delphizip] Exclusive file access
> >
> >
> > >
> > > Hello to all! I am new to this mail list, so my question may be
answered
> > > already and I want to appologize, if it is so.
> > >
> > > I have an application (http://www.milenix.com - MyInfo 2), which uses
> > BCBZip
> > > ver. 1.6. However there is a problem, because a single file could be
> > opened
> > > in two instances of the program and then when the user saves the file
> > (which
> > > is actually an archive with many files within) in one of the instances
> and
> > > then saves it in the other - there is a mess with the file and
sometimes
> > > even the all information could be lost.
> > >
> > > I want to prevent this by gaining exclusive read-write access of the
> file,
> > > so it could be opened only once. There is no such option in BCBZip,
but
> is
> > > there some way to workaround it?
> > >
> > > Thank you very much for your time!
> > > Petko Kafedjiski
> > > Milenix Software Ltd.
> > > http://www.milenix.com
> > >
> > >
> >
>


Other related posts: