iOS基本FTP设置;读写流

时间:2012-03-12 18:23:21

标签: iphone objective-c ios ios5 ftp

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

我的问题是这些:

  1. 您可以向我推荐任何教程/示例代码吗?
  2. 我应该使用哪些框架和类进行基本的读/写操作?
  3. 最后,我应该提一下,我已经花了相当多的时间来分析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 
    }
    

2 个答案:

答案 0 :(得分:7)

SimpleFTPSample应用程序运行正常,可能存在您无法看到的问题。我可以推荐你的(除了Apple的例子)是检查THIS示例,其中包含所有基本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];
}

上传是以类似的方式实现的 - 将[FTPHelper upload:FILE_TO_UPLOAD]与文件系统中的文件一起使用。

答案 1 :(得分:4)

您可以使用许多库,它们工作得很好。 :)

例如:

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

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

我建议使用它们,因为自己编码需要花费很多时间:) 要记住的一件事,正如o15a3d4l11s2所说,要注意ARC。如果您使用它,请不要忘记将构建标志添加到非ARC的库中。