1

我正在使用苹果的“ SimpleFTPSample ”项目进行测试,以了解 ftp 与 iOS 的工作原理。我在“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”的情况不会被处理。我怎样才能让它工作?失败在哪里?我想显示下载状态的进度条 - 所以我之前需要完整的文件大小。

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

4

2 回答 2

0

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

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

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

于 2011-08-19T15:26:41.393 回答
0

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

您可能应该创建一个作为 GetController 子类的新控制器,将其命名为 StatController... 将 _startReceive 和流处理程序覆盖到您的新方法中。

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

于 2011-04-29T06:47:27.680 回答