在我的iphone应用程序中,只要添加这些文件,我就会在表格视图中显示添加到文档目录的文件的信息。为此,我使用了apple中的一个示例代码中提供的DirectoryWatcher类。
以下是显示其用途的代码块:
- (void)viewDidLoad
{
// start monitoring the document directory…
self.aDirectoryWatcher = [DirectoryWatcher watchFolderWithPath:[self applicationDocumentsDirectory] delegate:self];
// scan for existing documents
[self directoryDidChange:self.aDirectoryWatcher];
}
- (void)directoryDidChange:(DirectoryWatcher *)folderWatcher
{
[self reconcileData];
}
表格视图中显示的信息之一是文件大小,我将获得如下信息:
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:nil];
NSNumber * size = [fileAttributes objectForKey:NSFileSize];
问题是 -
当我尝试添加大文件(例如电影文件)时,则为 它调用后立即开始传输(复制或移动操作) directoryDidChange:立即。除非转移,否则它不会等待 完成了。所以我的大小总是为0。
对于小尺寸文件(例如图像),它可以正常工作。
现在我有两个问题:
有没有办法知道文件的完整大小,它处于传输状态。例如。如果显示的消息是复制30 MB 100 MB,我想获得100 MB?
是否有DirectoryWatcher的替代方案,只有在完全添加文件时才会通知?
请建议。
答案 0 :(得分:1)
您目前正在寻找文件系统,您应该查看下载请求中的响应标头。
例如,当您使用NSURLConnection下载文件时,您可以实现委托方法连接:didReceiveResponse:并查看响应标头。
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSLog(@"Expected content length: %lld", httpResponse.expectedContentLength);
}
}
要在完成后收到通知,您可以实现connectionDidFinishLoading:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Notify download success
}
和
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// Notify error
}