我目前有一个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;
}
不幸的是,这不起作用。有什么想法吗?
答案 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
非常有用