如何检查当前UITableView行的文档文件大小

时间:2012-01-28 17:07:38

标签: iphone objective-c ios uitableview filesize

我目前有一个UITableView显示我的应用程序的文档目录。如何获取当前行文档的文件大小?

我的代码目前如下:

- (UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"cellID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    // layout the cell
    cell.textLabel.text = [self.drive.filesArray objectAtIndex:indexPath.row];
    NSInteger iconCount = [docInteractionController.icons count];
    cell.imageView.image = [docInteractionController.icons objectAtIndex:iconCount - 1];

    NSString *fileURLString = [self.drive.filesArray objectAtIndex:indexPath.row];
    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:fileURLString error:nil];
    NSString *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
    long long fileSize = [fileSizeNumber longLongValue];

    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ - %@",
                                 fileSizeNumber, [self.drive.filesArray objectAtIndex:indexPath.row]];

    return cell;
}

不幸的是,这不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我不知道self.drive.filesArray是什么,但如果你使用NSDocumentDirectory,获取路径,然后在该路径中的文件,它将工作。

以下示例对我有用,我认为这是如何在iOS上处理应用程序的文档目录的方式:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *files = [fm contentsOfDirectoryAtPath:documentsDirectory error:nil];
NSString *fileFirst = [files objectAtIndex:0];
NSString *fullPath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileFirst];
NSDictionary *attrs = [fm attributesOfItemAtPath:fullPath error:nil];
long long fileSize = [attrs fileSize];

NSLog(@"File is %@ and size is %lld",fileFirst, fileSize)

你最终会得到像

这样的东西
2012-01-28 22:34:00.916 fileOperations[57498:f803] File is smallImage.jpg and size is 30979

我认为你的路径仍然错误,我的(在iOS 5.0.1的iPhone上)是

/var/mobile/Applications/DA47CD6A-8AA8-4739-8CCB-6087F30C0954/Documents/smallImage.jpg

这里指的是文件。纠正您的代码以获得正确的路径,将文件保存到正确的路径,您应该能够从文件中获取属性。您的文件可能不存在或者fm只是没有获得您想要的权限。我不知道,因为您将错误从文件管理器发送到 nil 对象。还有问题,你如何收集 self.drive.filesArray 数组? 我试着以这种方式收集你的self.drive.filesArray,我在上面写道。它有效。

答案 1 :(得分:0)

你应该修改你的代码:

NSLog(@"fileURLString %@", fileURLString);
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:fileURLString error:nil];
NSLog(@"fileAttributes %@", fileAttributes);
NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
NSLog(@"fileSizeNumber %@", fileSizeNumber);

cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ - %@", fileSizeNumber, [self.drive.filesArray objectAtIndex:indexPath.row]];

检查是否提供了正确的fileURLString来获取属性。要获得有关iOS应用程序目录结构的更多信息,熟悉File System Programming Guide

非常有用