iOS基本FTP设置; 读写流

Squ*_*tch 5 iphone ftp objective-c ios ios5

我正在尝试创建一个具有一些非常基本的FTP功能的iOS 5应用程序,需要一些指导.它将连接到本地网络上的设备,并使用.dat/txt文件执行读/写操作.我已经做了一些搜索过去的几天,并看到了各种建议,但没有什么简单,我可以拿起并快速修改我个人使用.

我的问题是这些:

  1. 您可以向我推荐任何教程/示例代码吗?
  2. 我应该使用哪些框架和类进行基本的读/写操作?

最后,我应该提一下,我已经花了相当多的时间来分析来自Apple的SimpleFTPSample,但是示例代码为每个示例提供了"连接失败"和"流开放错误"通知,因此我对它有点警惕实用性.

请原谅我,如果这已在其他地方得到解答.所有相关的帖子都有我需要的答案,但不是全部.先感谢您!

为清晰起见编辑:一个明确定义的示例或分步教程是我真正想要的.我自己的谷歌搜索没有发现,我迫切需要一些指导.

更新: 很久以前我发布了这个问题,但继续使用接受的答案中提到的F​​TPHelper.我最近刷掉了旧项目的灰尘,并意识到FTPHelper的获取功能中存在轻微的内存泄漏,如果反复调用,它可以成为app-killer.如果anybdy偶然发现这个问题并选择使用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 
}
Run Code Online (Sandbox Code Playgroud)

o15*_*1s2 7

SimpleFTPSample应用程序运行完美,可能存在您无法看到的问题.我可以推荐你(除了Apple的例子)是检查这个包含所有基本FTP操作的助手类的例子.有一点需要注意的是iOS 5 ARC.Apple的示例和我链接的示例都适用于较旧的iOS版本.

在iOS 5中基本上有两种方法可以使用它们 - 通过-fno-objc-arc在[你的项目]中添加标志告诉编译器不使用ARC - >目标 - > [你的应用] - >构建阶段 - >编译源 - > [你的文件],或者使用Xcode中的内置工具转换为ARC.

我个人只测试了第一种方法,它对我有用.

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

更新:

基本机制是用于[FTPHelper list:THE_FTP_URL]列出文件夹的内容,然后使用内容创建一个列表,具体取决于使用的类型(文件或文件夹)下载[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];
}
Run Code Online (Sandbox Code Playgroud)

上传以类似的方式实现 - 使用[FTPHelper upload:FILE_TO_UPLOAD]文件系统中的文件.