What exactly do you want to do?
Is there a need to have the source file open read/write?
If you know that your own program is the only process that has the source file open (with write permission) than simply open the file with "fmOpenRead or fmShareDenyNone".
The actual copying is basic stuff, I take it that you can implement that yourself?
I have a rather elaborate FileCopy routine that provides a callback for e.g. a progressbar.
I use it for my backup program (so I trust the code).
That one uses fmShareDenyWrite also (there is af course a reason for that: if you copy the first block and then some other process rewrites that, your copy may become invalid to the point it cannot be read by the application you designed it for).
You're free to change that.
You can find it at
http://svn.code.sf.net/p/flyingsheep/code/trunk/MijnLib/fsifileutils.pp.
Bart