iOS基本的FTP设置; 读写stream

我试图创build一个iOS 5的应用程序与一些非常基本的FTPfunction,需要一些指导。 它将连接到本地networking上的设备,并使用.dat / txt文件执行读取/写入操作。 我已经做了一些search过去几天,并看到了各种build议,但不够简单,我可以拿起,并迅速修改我个人的用途。

我的问题是这些:

  1. 有什么教程/示例代码,你可以推荐给我?
  2. 我应该使用哪些框架和类来进行基本的读/写操作?

最后,我应该提到,我已经给了大量时间来分析Apple的SimpleFTPSample,但是示例代码给出了每个示例的“连接失败”和“stream式打开错误”通知,所以我对它的一些警告用处。

原谅我,如果这已经在别处回答。 所有相关的post都有我需要的答案,但不是全部。 先谢谢你!

编辑澄清:一个明确的例子或分步教程是我真的很喜欢。 我自己的谷歌search什么都没有,我迫切需要一些指导。

更新:我很久以前发布了这个问题,但继续使用接受的答案中提到的F​​TPHelper。 我最近刷新了旧项目的灰尘,意识到FTPHelper的获取函数有一点点内存泄漏,如果重复调用,可能会成为一个应用程序杀手。 如果anybdy绊倒了这个问题,并select使用FTPHelper,一定要添加下面的代码中看到的CFRelease行。

- (void) fetch: (NSString *) anItem { if (!self.uname || !self.pword) COMPLAIN_AND_BAIL(@"Please set user name and password first"); if (!self.urlString) COMPLAIN_AND_BAIL(@"Please set URL string first"); NSString *ftpRequest = [NSString stringWithFormat:@"%@/%@", self.urlString, [anItem stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; /* CFShow(ftpRequest); */ NSString *writepath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; self.filePath = [writepath stringByAppendingPathComponent:anItem]; CFURLRef writeURL = CFURLCreateFromFileSystemRepresentation (NULL, (const UInt8 *) [writepath UTF8String], [writepath length], NO); MySimpleDownload((CFStringRef)ftpRequest, writeURL, (CFStringRef) self.uname, (CFStringRef)self.pword); CFRelease(writeURL);//ADD THIS LINE TO FIX MEMORY LEAK } 

SimpleFTPSample应用程序正在运行完美,可能有一个问题,你看不到。 我可以推荐你(除了苹果的例子)是检查这个例子,其中包含所有基本的FTP操作的助手类。 有一点要注意的是iOS 5 ARC。 苹果的例子和我链接的是iOS版本。

基本上有两种方法可以在iOS 5中使用它们 – 通过在[您的项目] – > TARGETS – > [Your app] – > Build Phases – > Compile中通过添加-fno-objc-arc标志来告诉编译器不使用ARC来源 – > [您的文件],或者使用Xcode中的内置工具转换为ARC。

我个人testing只有第一种方法,它适用于我。

如果这不能帮助你,我可以写一个例子,但不幸的是今天我很忙。

更新:

基本机制是使用[FTPHelper list:THE_FTP_URL]列出文件夹的内容,然后使用[FTPHelper download: THE_FTP_URL_WITH_THE_FILENAME_FROM_LISTING]创build一个包含内容并根据types(文件或文件夹)下载的[FTPHelper download: THE_FTP_URL_WITH_THE_FILENAME_FROM_LISTING] 。 从这里你必须执行

 - (void) downloadFinished { //do the reading depending on the file type NSData *data = [NSData dataWithContentsOfFile:[FTPHelper sharedInstance].filePath]; } 

上传是以类似的方式实现的 – 使用[FTPHelper upload:FILE_TO_UPLOAD]和文件系统中的文件。

有很多你可以使用的库,他们工作得很好。 🙂

例如:

http://www.chilkatsoft.com/ftp-objc.asp

http://code.google.com/p/ios-ftp-server/

我build议使用它们,因为编码一个人会花很多时间:)有一点要记住,正如o15a3d4l11s2所说的,是要知道ARC。 如果你使用它,不要忘记添加构build标志到非ARC的库。