Solved

Using TSHFileOpStruct to copy files

Posted on 2004-08-06
3
4,557 Views
Last Modified: 2008-01-09
Hi, I have a problem. When I copy a file from a ShellListView1 (Drive c: for instance) to another drive (D: for instance), and the file I want to copy is already on D:, the file is not overwritten. No questions are asked wether to allow to overwrite te file with the newer one. How can I do this ?
Here is the code.

procedure TJawsieback.SpeedButton4Click(Sender: TObject);
 var FOS: TSHFileOpStruct;
     A, B: string;
     i: integer ;
begin
try
B:= ShellTreeView2.Path;
SpeedButton3.Enabled:= False;
 ShellTreeView2.Root:= B;
 for i:= 0 to ShellListView1.Items.Count -1 do begin
  if ShellListView1.Items.Item[i].Selected = True then begin
   Label4.Caption:= 'Schrijven gegevens naar de Bestemmings-schijf';
   A:= ShellListView1.Folders[i].PathName ;
   DirectorySize(A);
   GetHugeFileSize(A);
   Label5.Caption:= IntToStr(DirectorySize(A));
   Label16.Caption:= IntToStr(GetHugeFileSize(A));
   Vrij:= DiskFree(Datamodule1.BackupSchijfnummer.Value);
   Label6.Caption:= IntToStr(vrij);
          with FOS do begin
           wFunc:= FO_COPY;
           pFrom:= PChar(A + #0);
           pTo:= PChar(B + #0);
           fFlags:= FOF_NoConfirmMKDir;
           SHFileOperation(FOS);
           ShellListView1.Items.Item[i].Selected := False;
           Vrij:= DiskFree(Datamodule1.BackupSchijfnummer.Value);
         end;
  end;
end;
finally
 ShellListView2.Update;
 ShellTreeView2.Update;
 SpeedButton3.Enabled:= True;
 SpeedButton4.Visible:= False;
 SpeedButton1.Enabled:= True;
 Label6.Caption:= IntToStr(0);
 Label5.Caption:= IntToStr(0);
 Label4.Caption:= 'Backup voltooid';
end;
end;


Thx a lot
marioway
0
Comment
Question by:marioway
  • 2
3 Comments
 
LVL 7

Expert Comment

by:LRHGuy
ID: 11740038
Make this minor change:

   fFlags:= FOF_NoConfirmMKDir or FOF_NoConfirmation;

I believe the file will be written over with no notification. (That's what you want?)

0
 

Author Comment

by:marioway
ID: 11741897
Hi, I tried it and it works fine for a single file, but I still have another problem: When I copy a directory from C: to D: , the first time everything is OK, even when I change the content of a file inside the directory on C: ; but when I delete for instance a file in the directory on C: and copy the directory to D: (where the first copy resides) , the file I deleted on C: is still visible in the directory on the D:. So I suppose the directory on the D: is not overwritten (?!).

thx
marioway
0
 
LVL 7

Accepted Solution

by:
LRHGuy earned 125 total points
ID: 11742996
That is a different problem! The copy is file by file. You have to figure out on your own what has been deleted in one directory then delete it in the other.

Or, you could simply delete the target directory (D:), then copy C: to D:, then it will be a more exact copy.
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now