Solved

Moving files & folders

Posted on 2001-09-18
8
195 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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
 

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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…

688 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