SimpleFTPSample”项目,以了解如何FTP与iOS适用于FTP下载获取文件大小" /> SimpleFTPSample”项目,以了解如何FTP与iOS适用于FTP下载获取文件大小 - 源码之家" />

与苹果的“SimpleFTPSample”项目,以了解如何FTP与iOS适用于FTP下载获取文件大小

问题描述:

IM测试周围。我在“GetController.m”中添加了两行以获取要下载的文件的大小。与苹果的“<a href="http://developer.apple.com/library/ios/#samplecode/SimpleFTPSample/Introduction/Intro.html" rel="nofollow">SimpleFTPSample</a>”项目,以了解如何FTP与iOS适用于FTP下载获取文件大小

-(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服务器的文件的修改日期的方式?

+0

我得到档案大小= 0 这是否意味着文件存在..? – Shailesh 2013-04-10 08:22:55