[DUG] Copying files problem

Matt Comb matt at ferndigital.com
Tue Sep 26 20:23:38 NZST 2006


Yes they are different.

 

Can't remember exact details, but one filing system stores localised time
with the file, the other does not. You notice it when you clock around to
daylight savings, and one of the dates automatically changes, but the other
files date does not.

 

Matt.

 

From: delphi-bounces at ns3.123.co.nz [mailto:delphi-bounces at ns3.123.co.nz] On
Behalf Of John Bird
Sent: Tuesday, 26 September 2006 7:01 p.m.
To: 'NZ Borland Developers Group - Delphi List'
Subject: RE: [DUG] Copying files problem

 

Tested the question below - a file has same number on NTFS and FAT32

 

I am using code like this as alternative way to copy a file using
FileStream.

Like it that the copy is done in one line using CopyFrom :) - the rest is
just housekeeping and checking.

 

(got some ideas from Google- as I could not find your example in the D2006
help)

 

so far seems to work fine...if anyone has suggestions for improvement add
them.

 

function xffsCopyFile(aFile1:string;aFile2:string):int64;
//returns number bytes copied, -1 if not successful
var
FileSize1,FileSize2,bytescopied:int64;
fs1,fs2:TFileStream;
FileAge1,FileAge2:integer;
begin
 result:=0;
  bytescopied:=0;
  fs1 := TFileStream.Create(aFile1, fmOpenRead);
  try
    fs2 := TFileStream.Create(aFile2, fmCreate);
    try
      {Forget about block reads and writes, just copy
       the whole darn thing.}
      bytescopied:=fs2.CopyFrom(fs1, 0);
    finally
      fs2.Free;
    end;
  finally
    fs1.Free;
  end;
  result:=bytescopied;
  //alter file dateTime Stamp to match original file
  if (FileExists(aFile1))
  and (FileExists(aFile2)) then
  begin
    FileSize1:=xffsFileSize(aFile1);
    FileSize2:=xffsFileSize(aFile2);
    FileAge1:=FileAge(aFile1);
    FileAge2:=FileAge(aFile2);
    if (FileSize1=FileSize2)
      and(FileSize2=bytescopied)
      and(FileAge2>FileAge1) then
      begin
       //only set date if copied right size and date of
        //File2 now later than File1
      FileSetDate(aFile2,FileAge1);
      end
      else result:=-1;  //signal error
  end;
end;

 

function xffsFileSize(Filename:string):int64;
var
fs:TFileStream;
begin
 result:=0;
  if FIleExists(Filename) then
  begin
    try
      fs:=Tfilestream.create(FileName,fmOpenRead or fmShareDenyNone);
      //more code for I/U
      fs.seek(0,soFromBeginning);
      result:=fs.size;
    finally
    fs.free;
    end;
  end;
end;

John Bird

 

-----Original Message-----
From: delphi-bounces at ns3.123.co.nz [mailto:delphi-bounces at ns3.123.co.nz] On
Behalf Of John Bird
Sent: Friday, 22 September 2006 12:07 p.m.
To: 'Conor Boyd'; 'NZ Borland Developers Group - Delphi List'
Subject: RE: [DUG] Copying files problem

If I use FileSetDate to set the date/time of the destination file, using the
value I got for the source file (calling eg FileAge) does it set the same
date/time if the source and destination file systems are different types (eg
FAT32/NTFS) ? 

 

Anyone know off the top of their head if this number is filesystem dependent
or not?

 

 

John

-----Original Message-----
From: Conor Boyd [mailto:Conor.Boyd at trimble.co.nz] 
Sent: Friday, 22 September 2006 10:51 a.m.
To: johnkbird at paradise.net.nz; NZ Borland Developers Group - Delphi List
Subject: RE: [DUG] Copying files problem

You could still use the FileStream technique and just touch the time stamps
as required using FileSetDate in SysUtils?

 

C.

 


  _____  


From: delphi-bounces at ns3.123.co.nz [mailto:delphi-bounces at ns3.123.co.nz] On
Behalf Of John Bird
 

The main reason I wanted to use an API method (ie copying a file rather than
using FileStream etc to copy the data) is I want to preserve the date and
time filestamps on the files, as I do a smart copy - only copying files that
have a later modification date.

 

[snip] 



__________ NOD32 1.1461 (20060329) Information __________

This message was checked by NOD32 antivirus system.
http://www.eset.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://ns3.123.co.nz/pipermail/delphi/attachments/20060926/b870dd11/attachment.html


More information about the Delphi mailing list