我正在尝试通过NSURLSession连接到媒体服务器,并列出该url上的所有可用目录/文件
(即。
ftp://mediaServer.local
)
,然后遍历它们,直到找到要查找的文件。
我可以使用“dataTaskWithRequest”提供一个url并吐出它的顶级文件/目录,但解析后的NSData并不真正可读,因此我可以将文件/目录附加到原始url,然后沿着路径遍历。
以下是吐出的内容:
Results: drwxrwsr-x 11 65534 65534 65536 Sep 19 15:36 Public
然后我要遍历的目录是“Public”目录,因此接下来我要使用的url应该是
ftp://mediaServer.local/Public/
.
如何解析NSData对象以更容易地获取所有可读文件/目录的实际名称?
我尝试将NSData结果解析为JSON字典,但这不起作用。有什么建议吗?
这是我的代码:
// Url used = ftp://mediaServer.local/
func startRequestWithUrl(url: NSURL)
{
let request = NSURLRequest(URL: url)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
print("Data: \(data)")
print("Response: \(response)")
print("Error: \(error)")
if let data = data, let results = NSString(data: data, encoding: NSASCIIStringEncoding)
{
print("Results: \(results)")
do
{
let dict = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary
print("Dict: \(dict)")
}
catch let caught as NSError
{
print("Caught: \(caught)")
}
catch
{
// Something else happened.
print("Error parsing data.")
}
}
}
task.resume()
}
更新:
使用下面的答案,我尝试将每个文件/目录拆分为一个字符串,并将其拆分为一组数组,但它似乎无法正确地拆分组件,因为我只得到了具有完整文件路径字符串的单个项目数组。
代码:
if let data = data, let results = NSString(data: data, encoding: NSASCIIStringEncoding)
{
print("Results: \(results)")
let lines = results.componentsSeparatedByString("\n")
for line in lines
{
let fields = line.componentsSeparatedByString("\t")
print("Line: \(line) - Fields: \(fields)")
}
}
结果:
Results: drwxrwsr-x 11 65534 65534 65536 Sep 19 15:36 Public
Line: drwxrwsr-x 11 65534 65534 65536 Sep 19 15:36 Public
- Fields: ["drwxrwsr-x 11 65534 65534 65536 Sep 19 15:36 Public\r"]
Line: - Fields: [""]