iOS - 为 Web URL 解析 filenames/directories 的列表?

iOS - Parse list of filenames/directories for a Web URL?

我想从提供的网站 url 获取所有文件名和目录,这样我就可以在我的应用程序中轻松创建指向那些 files/directories 的链接。

我无法找到解析使用 NSURLSession 的 'dataTaskWithRequest' 方法时返回的文本文件的最佳方法,因为它returns url(即权限、创建日期、所有者、组等)。

以下是我从 Web 获取数据的方法 URL:

    let request = NSURLRequest(URL: url)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(request) {[weak self] (data, response, error) -> Void in
        print("Data: \(data)")
        print("Response: \(response)")
        print("Error: \(error)")

        if let weakSelf = self, let data = data, let results = NSString(data: data, encoding: NSASCIIStringEncoding)
        {
            ...how do I parse out the file/directory names???...
        }
    }
    task.resume()

这是从给定 URL:

返回的字符串示例
drwxrwxr-x   26 65534    65534       65536 Sep 20 03:29 Movies
drwxrwsr-x    3 0        65534       65536 Jul 09  2013 Network Trash Folder
drwxrwxr-x   41 65534    65534       65536 Aug 24 15:58 TV
drwxrwsr-x    3 0        65534       65536 Jul 09  2013 Temporary Items

我只需要能够轻松准确地解析出 file/directory 名称,这样我就可以创建指向它们的链接。建议?

假设您的字符串由换行符分隔,您可以通过以下方式解决此问题:

第一步:给整个字符串中的return个词添加方法

- (NSString *)lastComponentFromString:(NSString *)iString {
    NSRange range= [iString rangeOfString: @" " options: NSBackwardsSearch];
    return  [iString substringFromIndex: range.location+1];   
}

第 2 步: 将方法添加到 return 整个字符串但最后一个字

- (NSString *)stringAfterRemovingLastComponentFromString:(NSString *)iString {
    NSRange range= [iString rangeOfString: @" " options: NSBackwardsSearch];
    return [iString substringToIndex: range.location];
}

步骤 3: 将方法添加到 trim 前导和尾随空格

- (NSString *)trimString:(NSString *)iBaseString {
    return (iBaseString && ![iBaseString isKindOfClass:[NSNull class]] && iBaseString.length > 0) ? [iBaseString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] : nil;
}

第 4 步: 添加号码验证检查方法:

- (BOOL)numberValidation:(NSString *)text {
    NSString *regex = @"^([0-9]*|[0-9]*[.:][0-9]*)$";
    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    BOOL isValid = [test evaluateWithObject:text];
    return isValid;
}

第 5 步: 添加一次一行的方法,调用上述方法和 return 最终文件夹名称。在这里我们将继续寻找文件夹,直到我们找到一个数字。

- (NSString *)folderNameForPathString:(NSString *)iPathString {
    NSString *lastComponent = [self lastComponentFromString:iPathString];
    NSString *remainingString = [self stringAfterRemovingLastComponentFromString:iPathString];
    NSString *finalFolder = @"";

    while (lastComponent.integerValue == 0) {
        NSString *initialSpaceString = [NSString stringWithFormat:@" %@", finalFolder];

    // Check if the next component is a number
    if ([self numberValidation:lastComponent]) {
        lastComponent = @"";
    }
        finalFolder = [lastComponent stringByAppendingString:initialSpaceString];
        lastComponent = [self lastComponentFromString:remainingString];
        remainingString = [self stringAfterRemovingLastComponentFromString:remainingString];
    }

    return [self trimString:finalFolder];
}

第 6 步:最后,解析您的服务器字符串以获取由换行符分隔的各个字符串。

NSString *data =  @"drwxrwxr-x   26 65534    65534       65536 Sep 20 03:29 Movies\ndrwxrwsr-x    3 0        65534       65536 Jul 09  2013 Network Trash Folder\ndrwxrwxr-x   41 65534    65534       65536 Aug 24 15:58 TV\ndrwxrwsr-x    3 0        65534       65536 Jul 09  2013 Temporary Items";

NSArray *lineArray = [data componentsSeparatedByString:@"\n"];
NSMutableArray *folders = [NSMutableArray array];

for (NSString *pathString in lineArray) {
    [folders addObject:[self folderNameForPathString:pathString]];
}

NSLog(@"folders = %@", folders); // This prints - Movies, Network Trash Folder, TV, Temporary Items