获取FTP下载的文件大小

时间:2011-04-28 18:45:20

标签: objective-c ios ftp filesize cfreadstream

我正在测试来自苹果的“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”案例。我怎么能让这个工作?哪里失败了?我想显示下载状态的进度条 - 所以我之前需要完整的文件大小。

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

2 个答案:

答案 0 :(得分:0)

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

你应该创建一个新的控制器,它是GetController的子类,称之为StatController ... override _startReceive和你的新方法的流处理程序。

在启动异步下载之前,使用StatController获取资源大小。

答案 1 :(得分:0)

获取您需要的文件大小:

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

顺便提一下,您知道如何在ftp服务器中获取文件的修改日期吗?