para - ¿Cómo eliminar los archivos de directorio tmp de una aplicación ios?
icloud (6)
Estoy trabajando en una aplicación que utiliza la cámara del iPhone y después de realizar varias pruebas me he dado cuenta de que está almacenando todos los videos capturados en el directorio tmp de la aplicación. Las capturas no desaparecen incluso si el teléfono se reinicia.
¿Hay alguna manera de eliminar todas estas capturas o hay alguna forma de limpiar fácilmente todos los archivos de caché y temp?
Esto funciona en un iPad con jailbreak, pero creo que esto también debería funcionar en un dispositivo sin jailbreak.
-(void) clearCache
{
for(int i=0; i< 100;i++)
{
NSLog(@"warning CLEAR CACHE--------");
}
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError * error;
NSArray * cacheFiles = [fileManager contentsOfDirectoryAtPath:NSTemporaryDirectory() error:&error];
for(NSString * file in cacheFiles)
{
error=nil;
NSString * filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:file ];
NSLog(@"filePath to remove = %@",filePath);
BOOL removed =[fileManager removeItemAtPath:filePath error:&error];
if(removed ==NO)
{
NSLog(@"removed ==NO");
}
if(error)
{
NSLog(@"%@", [error description]);
}
}
}
Gracias a Max Maier y Roman Barzyczak. Actualizado a Swift 3, usando URL en lugar de cadenas.
Swift 3
func clearTmpDir(){
var removed: Int = 0
do {
let tmpDirURL = URL(string: NSTemporaryDirectory())!
let tmpFiles = try FileManager.default.contentsOfDirectory(at: tmpDirURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
print("/(tmpFiles.count) temporary files found")
for url in tmpFiles {
removed += 1
try FileManager.default.removeItem(at: url)
}
print("/(removed) temporary files removed")
} catch {
print(error)
print("/(removed) temporary files removed")
}
}
Sí. Este método funciona bien:
+ (void)clearTmpDirectory
{
NSArray* tmpDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSTemporaryDirectory() error:NULL];
for (NSString *file in tmpDirectory) {
[[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), file] error:NULL];
}
}
Swift 3 versión como extensión:
extension FileManager {
func clearTmpDirectory() {
do {
let tmpDirectory = try contentsOfDirectory(atPath: NSTemporaryDirectory())
try tmpDirectory.forEach {[unowned self] file in
let path = String.init(format: "%@%@", NSTemporaryDirectory(), file)
try self.removeItem(atPath: path)
}
} catch {
print(error)
}
}
}
Ejemplo de uso:
FileManager.default.clearTmpDirectory()
Gracias a Max Maier, versión Swift 2:
func clearTmpDirectory() {
do {
let tmpDirectory = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(NSTemporaryDirectory())
try tmpDirectory.forEach { file in
let path = String.init(format: "%@%@", NSTemporaryDirectory(), file)
try NSFileManager.defaultManager().removeItemAtPath(path)
}
} catch {
print(error)
}
}
Pruebe este código para eliminar los archivos NSTemporaryDirectory
-(void)deleteTempData
{
NSString *tmpDirectory = NSTemporaryDirectory();
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *cacheFiles = [fileManager contentsOfDirectoryAtPath:tmpDirectory error:&error];
for (NSString *file in cacheFiles)
{
error = nil;
[fileManager removeItemAtPath:[tmpDirectory stringByAppendingPathComponent:file] error:&error];
}
}
y para verificar los datos eliminar o no escribir el código en didFinishLaunchingWithOptions
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
NSString *tmpDirectory = NSTemporaryDirectory();
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *cacheFiles = [fileManager contentsOfDirectoryAtPath:tmpDirectory error:&error];
NSLog(@"TempFile Count ::%lu",(unsigned long)cacheFiles.count);
return YES;
}
Swift 4
Una de las posibles implementaciones
extension FileManager {
func clearTmpDirectory() {
do {
let tmpDirURL = FileManager.default.temporaryDirectory
let tmpDirectory = try contentsOfDirectory(atPath: tmpDirURL.path)
try tmpDirectory.forEach { file in
let fileUrl = tmpDirURL.appendingPathComponent(file)
try removeItem(atPath: fileUrl.path)
}
} catch {
//catch the error somehow
}
}
}