3

我复制文件,然后我的应用程序完成从资源启动到缓存目录。但我想在复制文件期间更新我的进度条。

我使用以下代码复制文件:

-(BOOL)copyDirectory:(NSString*)source toDirectory:(NSString*)targat
{
    BOOL retVal = YES;
    NSFileManager *fileManager = [[NSFileManager alloc] init];

    NSError *error;
    if ([fileManager fileExistsAtPath:targat] == YES)
    {
        NSError *error = nil;
        [fileManager removeItemAtPath:targat error:&error];
    }


    if(![fileManager copyItemAtPath:source
                             toPath:targat
                              error:&error])
    {
        NSLog(@"Error copy files: %@", [error description]);
        retVal = NO;
    }
    [fileManager release];

    return retVal;
}

我想不出一个好主意,如何根据复制文件的进度更新进度条。

4

1 回答 1

10

在高层次上,您可能会接近以下内容:

  1. 在单独的线程中运行您的复制过程 (P1)
  2. 运行另一个线程(P2),它定期(比如每 100 毫秒)读取目标文件current_size
  3. 计算current_size / total_size
  4. 更新进度条 UI 元素

然后您只想找出文件的大小,实际上不必打开它。像这样使用NSFileManager

NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:self.finalPath error:NULL];
unsigned long long fileSize = [attributes fileSize]; // in bytes
于 2013-07-09T09:19:24.587 回答