henges@ingr.com (John Hengesbach) (02/21/90)
I am trying to move a file from one directory to another. I am trying to
do this using THINK C 4.0. This seemingly should be easy...so why am I
having so much trouble? I sure could use a helping hand.
The rename() library function works if you are just trying to rename it.
That was the first stumbling block. So into IM I go and I find that
there are several rename/move file functions. Vol IV p153-4 gives me
PBRename and PBHRename. However, these appear to be rename only type
functions, i.e. no actual move. On page 157, we find PBCatMove. This
appears to be what I want. Great!!
I've tried this many times an so far only seem to get error -43 (file not
found) with any of the different things I've tried.
Basically, I have the directory ID of the current_dir and of the
new_dir which I got from calls to either PBGetCatInfo or PBDirCreate
(depending on whether they were previously existing). I also have the
VRefNum which I got from the same call. The current default directory
is set to the current_dir. I then proceed to call PBCatMove
with the following arguments:
.ioCompletion ==> pass in a (long)0
.ioNamePtr ==> pass in a ptr to a pascal string of orig name
(without any colons, etc)
.ioVRefNum ==> pass in value received from call to PBGetCatinfo
on the current_directory
.ioNewName ==> pass in a ptr to a pascal string of new name
(without any colons, etc)
.ioNewDirID ==> pass in value received from call to PBGetCatInfo
for new_dir
.ioDirID ==> pass in value received from call to PBGetCatInfo
for current_dir
The relevant code snippet follows:
char file_name[256];
char new_name[256];
char old_name[256];
long current_id;
long new_id;
int results;
CInfoPBRec info_rec;
CMovePBRec move_rec;
printf("name to move: %s DirID: %ld VRefNum: %d NewDirID: %ld\n",
file_name,current_id,info_rec.hFileInfo.ioVRefNum,new_id);
sprintf(old_name,"%s",file_name);
CtoPstr(old_name);
/* Since the destination directory is a subdirectory of current_directory,
I tried both with and without : in the next line below to no avail.
v */
sprintf(new_name,":%s",file_name);
CtoPstr(new_name);
move_rec.ioCompletion = NULL;
move_rec.ioNamePtr = (StringPtr)old_name;
move_rec.ioVRefNum = info_rec.hFileInfo.ioVRefNum;
move_rec.ioNewName = (StringPtr)new_name;
move_rec.ioNewDirID = new_id;
move_rec.ioDirID = current_id;
results = PBCatMove(&move_rec,0);
printf("mode res: %d\n",results); /* results is always -43 */
John (why are easy things always the hardest?) Hengesbach
--
John Hengesbach
..!uunet!ingr!henges Intergraph
henges@ingr.com Huntsville, Alabama 35894-0001
(205)730-2020