获取FTP下载的文件大小

即时通讯testing苹果的“ SimpleFTPSample ”项目,了解如何与iOS的FTP工作。 我在“GetController.m”中添加了两行以获取要下载的文件的大小。

-(void)_startReceive { . . . // Open a CFFTPStream for the URL. ftpStream = CFReadStreamCreateWithFTPURL(NULL, (CFURLRef) url); CFReadStreamSetProperty(ftpStream, kCFStreamPropertyFTPFetchResourceInfo, kCFBooleanTrue); // Added: To get file size . . . } - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { . . . switch (eventCode) { case NSStreamEventOpenCompleted: { // Added: Finally get filesize fileSize = [[self.networkStream propertyForKey:(id)kCFStreamPropertyFTPResourceSize] integerValue]; [self _updateStatus:@"Opened connection"]; } break; . . . } 

现在我得到正确的文件大小(fileSize),但之后下载将无法启动。 “NSStreamEventHasBytesAvailable”情况将不会被处理。 我怎么能得到这个工作? 失败在哪里? 我想显示下载状态的进度条 – 所以我需要完整的文件大小。

我希望你能帮我解决这个问题。 谢谢!

我很确定,当你设置kCFStreamPropertyFTPFetchResourceInfo时,这意味着你只对这个特定请求中的资源大小感兴趣。

你可能应该创build一个新的控制器,它是GetController的子类,将其称为StatController …覆盖_startReceive和stream处理程序到您的新方法。

在开始asynchronous下载之前,使用StatController获取资源大小。

要获得您只需要的文件大小:

 case NSStreamEventOpenCompleted: { fileSize = [[self.networkStream propertyForKey:(id)kCFStreamPropertyFTPResourceSize] integerValue];} 

顺便说一下,你知道如何获得文件在FTP服务器的修改date?

Interesting Posts