2016-04-13 20 views
1

我正在開發一個使用Xamarin IOS的​​應用程序,使用opengl遊戲模板作爲開始。如何從絕對NSURL加載文件在xamarin

我已經建立了我的應用程序能夠打開一個特定的文件格式,並在AppDelegate.cs

的問題是,如果我這樣做已經重寫了的OpenURL代表:

public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation) 
     { 

      Stream bob = new FileStream(url.AbsoluteString, FileMode.Open, FileAccess.Read); 
      return true; 
     } 

我相處的

"Unable to open file : /private/var/mobile/Applications/A7B5E435-F7D1-4985-BA97-C243E63EFC39/MyApp.app/file:///private/var/mobile/Applications/A7B5E435-F7D1-4985-BA97-C243E63EFC39/Documents/Inbox/A%20File%20To%20Open.ext" 

這似乎是因爲url.AbsoluteString返回文件的線條異常的東西:/// ...的一部分,但永遠的FileStream想要一個更消毒路徑(WIT小時%與20年代例如空格)代替相對要做就要做到應用程序的包目錄

/private/var/mobile/Applications/A7B5E435-F7D1-4985-BA97-C243E63EFC39/MyApp.app/ 

在我得到了它在服用url.AbsoluteString非常破解方式工作結束後,刪除「文件:///「部分,將一堆../../../等添加到開頭,並用」「替換」%20「。

public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation) 
     { 
      string fname = "../../../../../../../../../" + (url.AbsoluteString).Replace("%20", " ").Replace("file:///",""); 
      Stream bob = new FileStream(fname, FileMode.Open, FileAccess.Read); 
      return true; 
     } 

而這個工作......但它似乎可怕的破解。那麼使用Xamarin從NSURL獲取可讀文件流的方法是什麼?

(注意,這是在IOS 7,在IOS 9,傳遞的路徑是對FILESTREAM的默認目錄不同在許多方面和在目錄樹中的較高水平太)

+0

什麼是'NSUrl'的來源是什麼?這是否來自文件選擇器?我剛剛實現了非常類似的行爲。 – matthewrdev

回答

2

使用上NSUrlPath屬性:

NSString urlString = new NSString("file:///stack/over%20flow/foobar.txt"); 
NSUrl myFileUrl = new NSUrl (urlString); 
Console.WriteLine (myFileUrl.AbsoluteString); 
string absPath = myFileUrl.Path; 
Console.WriteLine (absPath); 

2016-04-12 18:38:53.809 filepath[11174:1132929] file:///stack/over%20flow/foobar.txt 
2016-04-12 18:38:53.814 filepath[11174:1132929] /stack/over flow/foobar.txt 

編號:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/index.html#//apple_ref/occ/instp/NSURL/path

+0

謝謝,這回答了我的問題的一部分,但它沒有幫助的事實,即新的FileStream()需要一個相對路徑的問題中提到的一些隨機路徑 – matt

2

您可以檢索的文件路徑通過Path屬性NSUrl的組件:

string fname = url.Path; 
Stream bob = new FileStream(fname, FileMode.Open, FileAccess.Read); 
return true; 

這將返回絕對的文件路徑和解碼%20成空格。