Hi Jerry,

On 24 May 2010, at 2:29 PM, Jerry Krinock wrote:

> I did as Quincey suggested and it fixed the bug in my multi-stage automatic 
> migration.
> 
> Indeed, FSExchangeObjects() is documented as:
> 
> "... allows programs to implement a “safe save” operation by creating and 
> writing a complete new file and swapping the contents. An alias, FSSpec, or 
> FSRef that refers to the old file will now access the new data. ..."
> 
> Now that is indeed quite useful, and just what I needed.  I wonder why Apple 
> didn't provide a Cocoa wrapper for FSExchangeObjects() in NSFileManager?  
> Maybe they want us appreciate Quincey some more.

Apple did. I believe it was even mentioned in the release notes for 
SnowLeopard. Here's the method declaration from NSFileManager.h:

/* 
-replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error: 
is for developers who wish to perform a safe-save without using the full 
NSDocument machinery that is available in the AppKit.
 
    The `originalItemURL` is the item being replaced.
    `newItemURL` is the item which will replace the original item. This item 
should be placed in a temporary directory as provided by the OS, or in a 
uniquely named directory placed in the same directory as the original item if 
the temporary directory is not available.
    If `backupItemName` is provided, that name will be used to create a backup 
of the original item. The backup is placed in the same directory as the 
original item. If an error occurs during the creation of the backup item, the 
operation will fail. If there is already an item with the same name as the 
backup item, that item will be removed. The backup item will be removed in the 
event of success unless the 
`NSFileManagerItemReplacementWithoutDeletingBackupItem` option is provided in 
`options`.
    For `options`, pass `0` to get the default behavior, which uses only the 
metadata from the new item while adjusting some properties using values from 
the original item. Pass `NSFileManagerItemReplacementUsingNewMetadataOnly` in 
order to use all possible metadata from the new item.
 */
- (BOOL)replaceItemAtURL:(NSURL *)originalItemURL withItemAtURL:(NSURL 
*)newItemURL backupItemName:(NSString *)backupItemName 
options:(NSFileManagerItemReplacementOptions)options resultingItemURL:(NSURL 
**)resultingURL error:(NSError **)error 
AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER;

.chris

-- 
Chris Parker
iPhone Frameworks
Apple Inc.

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to