2015-09-20 41 views
1

我想在那個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: [""] 

回答

0

的結果只是一個文本目錄列表,只需分析文本。您可以使用componentsSeparatedByString:@"\n:來獲取一組條目。對於每個條目,您可以使用componentsSeparatedByString:@" :(可能是@「\ t」)來獲取文件名。

目錄可以由第一個字母「d」確定。

當然你會想忽略某些文件和目錄。

其他方法包括正則表達式和NSScanner。 當然你會想要忽略某些文件和目錄。

這是所有相當簡單的解析。

+0

謝謝!任何你有一個簡單的例子來解釋如何獲得目錄名稱?我想確保它能夠正確地獲取文件/目錄名稱,而不管其他文本可能被吐出,所以如果我使用數組,則不想依賴於「條目」的魔術數。 – JimmyJammed

+0

你需要嘗試。如果您遇到代碼問題,請將其添加到問題中,並且您應該獲得幫助。 – zaph

+0

確定更新了代碼。它似乎並沒有將字符串分解成適當的數組。有什麼建議麼? – JimmyJammed

相關問題