是否需要手动清除AFNetworking生成的不完整文件夹



作为标题,我正在处理一种情况,即在使用AFNetworking 2.5.4框架下载大型zip文件时,用户意外退出了该应用程序。我想知道是否需要手动清除AFNetworking生成的不完整文件夹(<app_name>/tmp/Incomplete(,因为zip文件下载非常大。如果iOS在增长时找到文件夹大小,它会处理此文件夹吗?

附言我的下载逻辑是使用 NSOperationQueue 和以下AFDownloadRequestOperation

- (AFDownloadRequestOperation *)operation
{
    if (_operation) {
        return _operation;
    }
    _operation = [[AFDownloadRequestOperation alloc] initWithRequest:self.downloadRequest
                                                          targetPath:self.targetPath
                                                        shouldResume:YES];
#ifdef DEBUG
    _operation.securityPolicy.allowInvalidCertificates = YES;
#endif
    [_operation setProgressiveDownloadProgressBlock:self.progressBlock];
    [_operation setCompletionBlockWithSuccess:self.completionBlock
                                      failure:self.failureBlock];
    _operation.deleteTempFileOnCancel = YES;
    return _operation;
}

您可以使用此恢复未完成的下载

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"....zip"]];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"....zip"];
    AFDownloadRequestOperation *operation = [[AFDownloadRequestOperation alloc] initWithRequest:request targetPath:path shouldResume:YES];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Successfully downloaded file to %@", path);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    [operation setProgressiveDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpected, long long totalBytesReadForFile, long long totalBytesExpectedToReadForFile) {
        NSLog(@"Operation%i: bytesRead: %d", 1, bytesRead);
        NSLog(@"Operation%i: totalBytesRead: %lld", 1, totalBytesRead);
        NSLog(@"Operation%i: totalBytesExpected: %lld", 1, totalBytesExpected);
        NSLog(@"Operation%i: totalBytesReadForFile: %lld", 1, totalBytesReadForFile);
        NSLog(@"Operation%i: totalBytesExpectedToReadForFile: %lld", 1, totalBytesExpectedToReadForFile);
    }];
    [operations addObject:operation];

或者您可以删除临时文件

    + (void)clearTmpDirectory
{
    NSArray* tmpDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSTemporaryDirectory() error:NULL];
    for (NSString *file in tmpDirectory) {
        [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), file] error:NULL];
    }
}

最新更新