2011-03-17 4 views
2

휴지통 내용을 프로그래밍 방식으로 비울 수 있는지 궁금합니다. 내가 현재 사용하고 거기에있는 파일 삭제 해요 :Objective-C/Cocoa를 통해 휴지통 비우기

:이 작업을 사용 후, 때마다 나는 휴지통에 파일을 드래그

NSFileManager *manager = [NSFileManager defaultManager]; 
    [manager removeItemAtPath:fileToDelete error:nil]; 

을하지만를, I는 메시지가 표시입니다 "xxxxxx.xxx"을 삭제 하시겠습니까?이 항목은 즉시 삭제됩니다 . 이 작업을 실행 취소 할 수 없습니다.

이것은 로그 아웃하거나 sudo rm -rf 휴지통에 보관 될 때까지 계속됩니다.

감사합니다.

+0

왜이 작업을 수행해야합니까? 휴지통은 사용자의 영역이며 앱이 실제로 그것을 망칠 필요가 없습니다. –

답변

3

을 찾을하지 않을 수 있도록 프로그램 아니요 API 그래서 가장 좋은 방법은 ScriptBridge를 사용하는 것입니다.

빌드 대상에 ScriptingBridge.framework를 추가하고 사용 찾기위한 헤더 파일을 생성합니다

sdef /System/Library/CoreServices/Finder.app/ | sdp -fh --basename Finder 

그런 다음 찾기를 요청할 수 있습니다 사용자에게 메시지를 표시하기 위해 휴지통 비우기 :

#import "Finder.h" 

FinderApplication *finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.Finder"]; 

// activate finder 
[finder activate]; 

// wait a moment (activate is not instant), then present alert message 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    [finder emptySecurity:security]; 
}); 

가 참조 자세한 내용은 Scripting Bridge documentation을 참조하십시오.


Xcode 7.3부터 Swift에서이 작업을 시도하면 Finder.h에 정의 된 클래스를 찾으려고 링커 오류가 발생합니다. 따라서 Objective-C 래퍼를 만들어야합니다.

+0

샌드 박싱이란 무엇입니까? –

+0

앱에 샌드 박스가 있으면 스크립팅 인 타이틀먼트가 필요합니다. – jbtule

+1

하지만 다시, 귀하의 앱이 샌드 박스로되어 있다면 왜 쓰레기를 비워야합니까? 질문을 시작합니다. – jbtule

3

당신이 수를 할 애플 스크립트를 사용해보십시오 : 그러나 쓰레기의 종류 삭제, 당신은 NSWorkspace와 쓰레기통에 물건을 넣을 수 있습니다

NSString* appleScriptString = @"tell application \"Finder\"\n" 
           @"if length of (items in the trash as string) is 0 then return\n" 
           @"empty trash\n" 
           @"repeat until (count items of trash) = 0\n" 
           @"delay 1\n" 
           @"end repeat\n" 
           @"end tell"; 
NSAppleScript* emptyTrashScript = [[NSAppleScript alloc] initWithSource:appleScriptString]; 

[emptyTrashScript executeAndReturnError:nil]; 
[emptyTrashScript release]; 
+0

감사합니다! 이 파일을 한 번에 할 수있는 방법이 있습니까? 콜백 메서드에서 파일을 개별적으로 삭제하고 각 파일에 대한 검사를 수행하고 삭제 한 후 다음 파일로 이동합니다. – minimalpop

+0

그들은 이미 쓰레기통에 있습니까? 한 번에 하나의 파일을 휴지통으로 비울 수 없습니다. 그러나 처리가 끝나면 수표를 받고 파일을 삭제 한 다음 휴지통을 비울 수 있습니다. 또는 휴지통에있는 파일을 반복하고 휴지통에서 삭제하지 않으려는 파일을 옮길 수도 있습니다.하지만 이는 다소 비생산적인 것입니다. – David