Carbonの新APIによる、Finder経由でのファイル削除
以前はAppleScript経由で面倒っぽかったけど、LeopardからCarbonにAPIが加わったらしい。
CarbonCore Framework Release Notes for Mac OS X v10.5
追記 @ 2009-03-23
とりあえず以下のコードで動くっぽい。要<CoreServices/CoreServices.h>。
- (BOOL)moveFileToTrash:(NSString *)filename
{
FSRef fileRef;
// 対象の存在をチェック
if(![[NSFileManager defaultManager] fileExistsAtPath:filename])
return NO;
// FSRefの取得(ちなみにコードを拝借したCocoaDVDPlayerではUTF-8ではなくASCIIにしてた)
//const char *cPath = [filename UTF8String];
// 追記その2参照
const char *cPath = [filename fileSystemRepresentation];
OSStatus result = FSPathMakeRef ((UInt8*)cPath, &fileRef, NULL);
if (result != noErr)
return NO;
// ゴミ箱に移動
// オプションはテキトー。Finderのような効果音は別途処理を記述する必要あり
result = FSMoveObjectToTrashSync(&fileRef, NULL, kFSFileOperationDefaultOptions);
return (result == noErr);
}
追記その2 @ 2009-03-28
Cocoa Study Blogの記事のコメントによると、UTF8String
ではなくfileSystemRepresentation
にすべきだろうとのこと。確かに、現在はUTF-8が使われてるけど、将来的には変更される可能性もあるし、こっちを使った方がいいかも。