如何删除一个iOS应用程序的tmp目录文件?

我正在开发一款使用iPhone相机的应用程序,经过多次testing,我意识到它将所有捕获的video存储在应用程序的tmp目录中。 即使手机重新启动,捕获也不会消失。

有什么办法来删除所有这些捕获或有任何方法来轻松清理所有的caching和临时文件?

是。 这种方法效果很好:

+ (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版本作为扩展:

 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) } } } 

使用示例:

 FileManager.default.clearTmpDirectory() 

感谢Max Maier,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) } } 

试试这个代码来删除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]; } } 

并检查数据删除或不写代码在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; } 

这在越狱的iPad上工作,但我认为这也应该在非越狱设备上工作。

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

感谢Max Maier和Roman Barzyczak。 更新到Swift 3,使用URL而不是string。

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") } } 

斯威夫特4

其中一个可能的实现

 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 } } }