Domanda

mi chiedevo se c'è un modo per svuotare di programmazione il contenuto del cestino. Attualmente sto eliminando i file che si trovano lì utilizzando:

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

Tuttavia, dopo che uso questa operazione, ogni volta che trascinare un file nel cestino, mi viene richiesto con il messaggio:

Sei sicuro di voler eliminare “Xxxxxx.xxx”? Questo articolo sarà cancellato subito. Non è possibile annullare questa azione.

Questo dura fino a che non sia uscita dal sito o sudo rm -rf cestino.

Grazie!

È stato utile?

Soluzione

Si può mettere roba nella spazzatura con NSWorkspace , tuttavia eliminando la spazzatura è una specie di no no per i programmi in modo che non sta andando a trovare un'API. Quindi la soluzione migliore sta usando lo ScriptBridge.

Aggiungi ScriptingBridge.framework al vostro obiettivo di compilazione, e generare un file di intestazione per il Finder utilizzando:

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

Poi si può chiedere Finder per richiedere all'utente di svuotare il cestino:

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

Vedere la documentazione di Scripting Ponte per maggiori dettagli.


Come di Xcode 7.3, se si tenta questo con Swift si ottengono errori del linker cercando di trovare classi definite in Finder.h. Quindi, si dovrà creare un wrapper di Objective-C.

Altri suggerimenti

Si potrebbe provare a utilizzare AppleScript per farlo:

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];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top