【问题标题】:update progress bar during copy file with NSFileManager使用 NSFileManager 在复制文件期间更新进度条
【发布时间】:2013-07-06 19:39:07
【问题描述】:

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

我用下面的代码复制文件:

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

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

【问题讨论】:

    标签: iphone ios objective-c progress-bar nsfilemanager


    【解决方案1】:

    在高层次上,你可以接近以下:

    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
    

    【讨论】:

    • 您是否有示例代码演示如何在一个单独的线程中复制,该线程会告诉您何时完成复制
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2016-02-17
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多