私は、iPhoneカメラを使用するアプリで作業しており、いくつかのテストを行った後、キャプチャしたすべてのビデオをアプリのtmpディレクトリに保存していることに気付きました。電話を再起動しても、キャプチャは消えません。
これらのすべてのキャプチャを削除する方法はありますか、またはすべてのキャッシュと一時ファイルを簡単に削除する方法はありますか?
はい。この方法はうまく機能します:
+ (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)
}
}
Swift 4
可能な実装の1つ
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
}
}
}
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;
}
マックス・マイヤーとローマン・バルジザックに感謝します。文字列の代わりにURLを使用して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")
}
}
これはジェイルブレイクされた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]);
}
}
}