FROM : John Stiles
DATE : Sat Jul 01 21:40:42 2006
Dean Snyder wrote:
> Sherm Pendley wrote at 2:15 PM on Saturday, July 1, 2006:
>
>
>>> "If source is a file, the method creates a file at destination that
>>> holds the exact contents of the original file and then deletes the
>>> original file. If source is a directory, movePath:toPath:handler:
>>> creates a new directory at destination and recursively populates it
>>> with
>>> duplicates of the files and directories contained in source."
>>>
>>> This is really heavyweight
>>>
>> No, it's not heavy at all - you've just misunderstood what it does.
>> When the above says "creates a file at destination", it's talking
>> about creating a new directory entry that points to the same data,
>> not about copying the data.
>>
>
> Again, with emphasis added, the documentation says, "creates a file at
> destination that holds the exact contents of the original file and THEN
> deletes the original file". That can only mean that at some point there
> are 2 copies of the file. (Notice there is no talk of just manipulating
> file references within the file manager's data structures.) That may
> not, in fact, be what it does, but that IS what the documentation says
> it does. And, of course, the issue is compounded when dealing with
> directories (where the documentation actually talks about "duplicates of
> the files and directories").
>
>
Even if it really does just make hard links, even that has undesirable
consequences. For example, if a file has /ever/ been hard-linked, it can
no longer be used with FSExchangeObjects. The API returns an error instead.
http://developer.apple.com/documentation/Carbon/Reference/File_Manager/Reference/reference.html#//apple_ref/c/func/FSExchangeObjects
The OP may want to look at using the Carbon File Manager, or BSD APIs,
to do the rename. It's a bit more typing than Cocoa, but the APIs in
this case offer more options.
DATE : Sat Jul 01 21:40:42 2006
Dean Snyder wrote:
> Sherm Pendley wrote at 2:15 PM on Saturday, July 1, 2006:
>
>
>>> "If source is a file, the method creates a file at destination that
>>> holds the exact contents of the original file and then deletes the
>>> original file. If source is a directory, movePath:toPath:handler:
>>> creates a new directory at destination and recursively populates it
>>> with
>>> duplicates of the files and directories contained in source."
>>>
>>> This is really heavyweight
>>>
>> No, it's not heavy at all - you've just misunderstood what it does.
>> When the above says "creates a file at destination", it's talking
>> about creating a new directory entry that points to the same data,
>> not about copying the data.
>>
>
> Again, with emphasis added, the documentation says, "creates a file at
> destination that holds the exact contents of the original file and THEN
> deletes the original file". That can only mean that at some point there
> are 2 copies of the file. (Notice there is no talk of just manipulating
> file references within the file manager's data structures.) That may
> not, in fact, be what it does, but that IS what the documentation says
> it does. And, of course, the issue is compounded when dealing with
> directories (where the documentation actually talks about "duplicates of
> the files and directories").
>
>
Even if it really does just make hard links, even that has undesirable
consequences. For example, if a file has /ever/ been hard-linked, it can
no longer be used with FSExchangeObjects. The API returns an error instead.
http://developer.apple.com/documentation/Carbon/Reference/File_Manager/Reference/reference.html#//apple_ref/c/func/FSExchangeObjects
The OP may want to look at using the Carbon File Manager, or BSD APIs,
to do the rename. It's a bit more typing than Cocoa, but the APIs in
this case offer more options.






Cocoa mail archive

