Solved

Moving files & folders

Posted on 2001-09-18
8
191 Views
Last Modified: 2012-05-04
I have the following code in my app:

with FOS do
   begin
   Wnd := Self.Handle;
   wFunc := FO_MOVE;
   pFrom := PChar(UserDrive);
   pTo := PChar(Archive);
   fFlags :=  FOF_ALLOWUNDO;
   end;
SHFileOperation(FOS);

The variable UserDrive points to a network folder (ie. \\server1\users\testuser) and Archive points to a local folder (ie D:\Archive). This procedure fails whatever is in the source folder with the error message "Cannot move I: Cannot find the file specified"

Needless to say, there isn't a file called I. Can anyone help?
0
Comment
Question by:riccohb
  • 2
  • 2
  • 2
  • +2
8 Comments
 
LVL 7

Expert Comment

by:Motaz
ID: 6489834
dir you try to use it for files instead of folders?

0
 
LVL 8

Accepted Solution

by:
TOndrej earned 85 total points
ID: 6489842
pFrom and pTo must be double-null terminated strings (multiple filenames separated by null character, the whole string terminated by two null characters).

If you want to pass only single file names they must still be terminated by two nulls.
0
 
LVL 7

Expert Comment

by:Motaz
ID: 6489869
I test it using real PCHar and it works:

procedure TForm1.Button1Click(Sender: TObject);
var
  FOS: _SHFILEOPSTRUCTA;
  UserDrive, Archive: PChar;
begin
  UserDrive:= StrAlloc(200);
  Archive:= StrAlloc(200);
  StrCopy(Archive, 'C:\Motaz\Temp');
  StrCopy(UserDrive, 'd:\test');
with FOS do
  begin
  Wnd := Self.Handle;
  wFunc := FO_MOVE;
  pFrom := UserDrive;
  pTo := Archive;
  fFlags :=  FOF_ALLOWUNDO;
  end;
SHFileOperation(FOS);
end;
0
 
LVL 8

Expert Comment

by:TOndrej
ID: 6489925
I read this in MSDN documentation for SHFileOperation... I could have made a mistake, sorry. I'm quite busy at the moment, perhaps I didn't read carefully
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:riccohb
ID: 6489971
I think it might be something to do with the fact that I'm copying from a network drive specified by \\servername\d$\foldername. If I manually map a drive to this address and run SHFileOperation via the mapped drive letter it works.

I've used Motaz's amended code without using a mapped drive letter, and the error comes back.
0
 
LVL 17

Expert Comment

by:geobul
ID: 6490046
Hi,
There are two possible reasons at least:
1. You do not write the correct path '\\server\path'.
2 You do not have permisions on that folder.

The code works fine with such syntax.

Regards, Geo
0
 

Author Comment

by:riccohb
ID: 6490075
It's definitely the correct path, and I have Domain Admin permissions. Domain Admins have full control of the folder. The code works in so far that it successfully moves all the files and folders from the source to the destination - it's just that once it's done that it looks like it tries to copy one extra file with a nonsense filename (eg |A?).
0
 
LVL 1

Expert Comment

by:pede
ID: 6490530
TOndrej is right about the double termination. Often your string will be followed by zeros because of uninitialized memory, but you really should add that extra #0.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Delphi XE2 application frozen on Windows 10 10 278
Newbie Thread Programming 1 139
Create Database on Android via Delphi dbExpress 3 81
QRReport  TQrmemo vertical stretching 1 42
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, just open a new email message. In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
Many functions in Excel can make decisions. The most simple of these is the IF function: it returns a value depending on whether a condition you describe is true or false. Once you get the hang of using the IF function, you will find it easier to us…

863 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

24 Experts available now in Live!

Get 1:1 Help Now