zoukankan      html  css  js  c++  java
  • iOS GoldRaccoon第三方FTP文件夹下载失败原因

    一、问题描述:1.下载失败报错:

    文件写入失败Error Domain=NSCocoaErrorDomain Code=512 "未能将文件“jquery_1_10_2_min.js”存储到文件夹“Q20180104153006399”中。"

    原因及解决方法:文件夹下均为文件,不包含子文件夹,GoldRaccoon第三方不会创建存储的本地文件夹,所以需要自己提前手动创建好下载的本地文件夹

    NSFileManager *fileManager = [NSFileManager defaultManager];
        
    NSString *zhenggedizhi1 = [documentsDirectoryPath stringByAppendingString:[NSString stringWithFormat:@"/%@/Q20180104153006399",@"OralQuesBank"]];
     [fileManager createDirectoryAtPath:zhenggedizhi1 withIntermediateDirectories:YES attributes:nil error:nil];

    二、补充:GoldRaccoon基本使用方法

    第三方GoldRaccoon使用方法主要参考网址:https://blog.csdn.net/wobushizhaoqian/article/details/72845898?locationNum=10&fps=1

    代码:

    /** 下载FTP资源 */
    #import "GRRequestsManager.h"
    #import "GRListingRequest.h"
    #import "FCFileManager.h"
    <GRRequestsManagerDelegate> 
    @property (nonatomic, strong) GRRequestsManager *requestsManager;
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        self.view.backgroundColor = [UIColor orangeColor];
    
        UIButton *downBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [downBtn setTitle:@"下载" forState:UIControlStateNormal];
        downBtn.backgroundColor = [UIColor cyanColor];
        [downBtn addTarget:self action:@selector(startDownClick) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:downBtn];
        [downBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.center.equalTo(self.view);
            make.size.mas_equalTo(CGSizeMake(50, 40));
        }];
    }
    
    - (void)startDownClick{
        //列表localuser下的文件夹目录,这里做的只是列表目录下面有什么
        [self.requestsManager addRequestForListDirectoryAtPath:@"OralQuesBank/Q20180104153006399"];
        [self.requestsManager startProcessingRequests];
    }
    #pragma mark *** GRRequestsManagerDelegate ***
    //代理方法,每次执行列表方法都会走这个方法
    - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didCompleteListingRequest:(id<GRRequestProtocol>)request listing:(NSArray *)listing{
        //沙盒目录
        NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        GRListingRequest *req = (GRListingRequest *)request;
        //远程文件夹列表
        NSLog(@"%@",listing);
        //打印创建的目录
        NSLog(@"%@",documentsDirectoryPath);
        NSFileManager *fileManager = [NSFileManager defaultManager];
     
    NSString
    *zhenggedizhi1 = [documentsDirectoryPath stringByAppendingString:[NSString stringWithFormat:@"/%@/Q20180104153006399",@"OralQuesBank"]]; [fileManager createDirectoryAtPath:zhenggedizhi1 withIntermediateDirectories:YES attributes:nil error:nil]; //文件夹列表枚举 [listing enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
    if ([[obj pathExtension] isEqualToString:@""]) { //整个地址,在沙盒中创建和远程文件一样的文件夹目录 NSString *zhenggedizhi = [documentsDirectoryPath stringByAppendingString:[NSString stringWithFormat:@"%@/%@",req.path,obj]]; //如果沙盒中的这个文件夹不存在就创建 if (![fileManager fileExistsAtPath:zhenggedizhi]) { [fileManager createDirectoryAtPath:zhenggedizhi withIntermediateDirectories:YES attributes:nil error:nil]; } //然后接着递归列举文件夹下的子文件夹下的目录 [self.requestsManager addRequestForListDirectoryAtPath:[NSString stringWithFormat:@"%@%@",req.path,obj]]; [self.requestsManager startProcessingRequests]; }else{ //如果目录下的不是文件夹,则下载这个文件到沙盒的指定目录下 NSString *zhenggedizhi = [documentsDirectoryPath stringByAppendingString:[NSString stringWithFormat:@"%@/%@",req.path,obj]]; //如果沙盒中的这个文件夹不存在就创建 if (![fileManager fileExistsAtPath:zhenggedizhi]) { [fileManager createDirectoryAtPath:zhenggedizhi withIntermediateDirectories:YES attributes:nil error:nil]; } [self.requestsManager addRequestForDownloadFileAtRemotePath:[NSString stringWithFormat:@"%@/%@",req.path,obj] toLocalPath:[documentsDirectoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%@",req.path,obj]]]; [self.requestsManager startProcessingRequests]; } }]; } - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didFailRequest:(id<GRRequestProtocol>)request withError:(NSError *)error { NSLog(@"请求失败requestsManager:didFailRequest:withError: %@", error); // NSString *errorStr = [NSString stringWithFormat:@"%@",error]; // [self downLoadFail];//可添加处理下载失败后自己的删除文件夹路径方法 } - (void)requestsManager:(id<GRRequestsManagerProtocol>)requestsManager didFailWritingFileAtPath:(NSString *)path forRequest:(id<GRDataExchangeRequestProtocol>)request error:(NSError *)error{ LSLog(@"文件写入失败%@",error); } - (void)requestsManagerDidCompleteQueue:(id<GRRequestsManagerProtocol>)requestsManager{ LSLog(@"整个文件夹下载完成+++++++++++++++++"); } #pragma mark - layzy - (GRRequestsManager *)requestsManager{ if (!_requestsManager) { _requestsManager = [[GRRequestsManager alloc] initWithHostname:@"ftp://11.11.111.11:12" user:@"Administrator" password:@"这是ftp密码"]; // 设置代理 _requestsManager.delegate = self; } return _requestsManager; }
  • 相关阅读:
    c# 调用DeepAI
    c#
    c# Polygon 画多边形,
    WPF BitmapSource /BitmapImage 获取像素点颜色
    前端面试题汇总
    element 动态合并表格
    JS的乘、除、加、减法结果会有误差,在两个浮点数相乘的时候会比较明显
    shell中针对数字、filename字符串等的判断参数的总结
    Android TV : 电视输入框架(TIF)剖析
    ubuntu更新系统函数手册
  • 原文地址:https://www.cnblogs.com/wusang/p/9110689.html
Copyright © 2011-2022 走看看