2


私のプロジェクトの紹介、フォルダーとそのコンテンツを削除する必要があるため、この受け入れられた回答を試してみましたClickHere

それは機能し、タスクは終了したと思いましたが、フォルダー(ディレクトリ)全体を削除した後、メモリはまだ割り当てられていますが、ファイルが存在しないことがわかります。
ディレクトリ(フォルダ)を削除するコードは次のとおりです。

-(BOOL)removeItem:(NSString*)name{
    //name: is directory(folder)'s name
    NSString*path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    path = [path stringByAppendingPathComponent:@"Normal"];
    path = [path stringByAppendingPathComponent:name];
    NSError* err;
    NSArray* list = [[NSFileManager defaultManager]contentsOfDirectoryAtPath:path error:&err];
    if(err){
        NSLog(@"\n##CONTENTS OF DIRECTORY ERROR:->\n%@",err.localizedDescription);
    }
    //if array's count is not zero(0) it means directory has files available.
    if(list.count >= 1){
        for(NSString* string in list){
            [[NSFileManager defaultManager]removeItemAtPath:[path stringByAppendingPathComponent:string] error:&err];
            if(err){
                NSLog(@"\n##FOLDER IN FOLDER ERROR:->\n%@",err.localizedDescription);
            }
        }
        [[NSFileManager defaultManager]removeItemAtPath:path error:&err];
        return YES;
    }else{
        [[NSFileManager defaultManager]removeItemAtPath:path error:&err];
        if (err) {
            return NO;
        }
        return YES;
    }
}


前もって感謝します。

4

1 に答える 1

7

わかりました、問題が発生しました。私の場合、問題は一時フォルダー(ディレクトリ)でした。動画をアプリに追加すると、iOS はアプリの一時フォルダー (ディレクトリ) にいくつかの一時ファイルを作成しました。そのため、アプリからファイル(ビデオ)を削除した後、設定->一般->使用法->ストレージの管理で見たアプリのサイズは、一時フォルダーのサイズでした。
そのため、ギャラリーから写真やビデオをインポートするときは、フェッチ後に一時フォルダーを手動でクリアする必要があります。以下のように、UIImagePickerController のデリゲートから一時フォルダーをクリアしています。

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info{
[self dismissViewControllerAnimated:YES completion:^{
BOOL success = [videoData writeToFile:path atomically:YES];
            NSLog(@"Successs:::: %@", success ? @"YES" : @"NO");
            [RWTAppDelegate clearTmpDirectory];
}];
}


+ (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+のアップデート

class func clearTmpDirectory(){
        let path = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
        let manager = FileManager.default
        let files = try? manager.contentsOfDirectory(atPath: path.path)
        files?.forEach { (file) in
            let temp = path.appendingPathComponent(file)
            try? manager.removeItem(at: temp)
            // --- you can use do{} catch{} for error handling ---//
        }
}


私の悪い英語でごめんなさい。

于 2015-10-06T04:25:20.673 に答える