我想在那個URL (即ftp://mediaServer.local)連接到通過NSURLSession媒體服務器並列出所有可用的目錄/文件,然後遍歷下來,直到我發現我要找的文件。iOS - 使用NSURLSession和dataTaskWithRequest在給定url處列出目錄/文件?
我能夠提供一個url並使用'dataTaskWithRequest'吐出它的頂層文件/目錄,但解析出來的NSData並不真正可讀,所以我實際上可以將文件/目錄附加到原始URL,然後遍歷沿着路徑。
這裏是被吐了出來:
Results: drwxrwsr-x 11 65534 65534 65536 Sep 19 15:36 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()
}
UPDATE:
有了下面的答案,我試着吐出的每個文件/目錄到一個單一的字符串,並把它分解成一個數組,但它似乎沒有正確拆分組件,因爲我只有完整文件路徑字符串的單項數組仍然存在。
代碼:
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: [""]
謝謝!任何你有一個簡單的例子來解釋如何獲得目錄名稱?我想確保它能夠正確地獲取文件/目錄名稱,而不管其他文本可能被吐出,所以如果我使用數組,則不想依賴於「條目」的魔術數。 – JimmyJammed
你需要嘗試。如果您遇到代碼問題,請將其添加到問題中,並且您應該獲得幫助。 – zaph
確定更新了代碼。它似乎並沒有將字符串分解成適當的數組。有什麼建議麼? – JimmyJammed