Pregunta

Me preguntaba si hay una manera de vaciar programáticamente el contenido del contenedor de basura. Actualmente estoy eliminando archivos que se encuentran allí usando:

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

Sin embargo, después de usar esta operación, cada vez que arrastra un archivo a la basura, me solicitan el mensaje:

¿Estás seguro de que quieres eliminar "xxxxxx.xxx"? Este elemento se eliminará de inmediato. No puedes deshacer esta acción.

Esto dura hasta que cierre la sesión o sudo rm -rf el contenedor de basura.

¡Gracias!

¿Fue útil?

Solución

Puedes poner cosas en la basura con Nsworkspace, sin embargo, eliminar la basura es una especie de no para programas, por lo que no encontrará una API. Entonces, tu mejor apuesta es usar ScriptBridge.

Agregar ScriptingBridge.framework a su objetivo de compilación y genere un archivo de encabezado para Finder usando:

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

Luego puede pedirle a Finder que le pida al usuario que vacíe la basura:

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

Ver el Documentación del puente de secuencias de comandos para más detalles.


A partir de Xcode 7.3, si intenta esto con Swift, obtendrá errores de enlace tratando de encontrar clases definidas en Finder.h. Por lo tanto, tendrá que crear un envoltorio Objective-C.

Otros consejos

Puede intentar usar AppleScript para hacerlo:

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];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top