目标C语言 获取文件大小在FTP下载



我正在测试苹果的"SimpleFTPSample"项目,以了解ftp在iOS中的工作原理。我在"GetController"中添加了两行。

-(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时,这意味着您只对特定请求中的资源大小感兴趣。

你应该创建一个新的控制器,它是GetController的子类,命名为StatController…重载_startReceive和流处理程序到你的新方法。

在开始异步下载之前使用StatController获取资源大小

获取文件大小只需输入:

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

顺便问一下,你知道如何在ftp服务器上获得文件的修改日期吗?

相关内容

  • 没有找到相关文章

最新更新