Frage

Ich habe mich gefragt, ob es eine Möglichkeit gibt, den Inhalt des Müllbehälters programmatisch zu entleeren. Ich lösche derzeit Dateien, die sich dort befinden, mit:

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

Nachdem ich diese Operation verwendet habe, werde ich jedes Mal, wenn ich eine Datei in den Müll ziehe, mit der Nachricht aufgefordert:

Sind Sie sicher, dass Sie "xxxxxxx.xxx" löschen möchten? Dieser Artikel wird sofort gelöscht. Sie können diese Aktion nicht rückgängig machen.

Dies dauert, bis ich mich entweder abgemeldet oder den Mülleimer sudo rm -rf.

Vielen Dank!

War es hilfreich?

Lösung

Sie können Sachen in den Müll legen NsWorkspace, Das Löschen des Mülls ist jedoch für Programme ein Nein Nein Nein. Sie werden also keine API finden. Ihre beste Wahl ist also die Verwendung der Skriptbridge.

Hinzufügen ScriptingBridge.framework zu Ihrem Build -Ziel und generieren Sie eine Header -Datei für den Finder mit:

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

Anschließend können Sie den Finder bitten, den Benutzer zu veranlassen, den Müll zu leeren:

#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];
});

Siehe das Scripting Bridge -Dokumentation für mehr Details.


Wenn Sie dies mit Swift versuchen, erhalten Sie nach Xcode 7.3 Linker -Fehler, die versuchen, in finder definierte Klassen zu finden. Sie müssen also eine Objektiv-C-Wrapper erstellen.

Andere Tipps

Sie können versuchen, Apfelkripte zu verwenden, um dies zu tun:

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];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top