2014-07-08 62 views
1

打開一個txt文件我目前Unity3D的工作,並希望在點擊一個按鈕,只需打開.txt文件。在Android

編輯:當我說打開一個txt文件,我指的是在設備上的一些編輯器中打開它,而不是打開它ASND保存它的內容在我的應用程序的一些字符串。有點像打開瀏覽器從應用程序訪問網站。

下面的代碼我現在有(C#):

private void ShowTextFile(string fileName) 
{ 
    Application.OpenURL(Application.streamingAssetsPath + "/PATH/" + fileName); 
} 

但它不工作!我錯過了什麼?

編輯:我期待爲.txt文件到另一個窗口打開(如打開一個網頁瀏覽器,例如),但它根本沒有做任何事情。甚至沒有出現錯誤。

EDIT2:我試着用Application.persistentDataPath代替,並在這兩種情況下,它說我的.txt文件不存在。但是,使用Application.persistentDataPath時,它會打開一個消息框,詢問我想要打開文件。無論我選擇什麼,它會給我一個錯誤,告訴我錯誤加載文件或類似的東西。我也注意到它會打開「file:///」。在路徑之前有一個文件:///是否正常?

EDIT3(我是着火了!):「」我認爲有問題可能與一個事實,在我的路徑中(數據路徑中的com.me.myapp)。有什麼辦法可以避免這種情況?我是否正在尋找正確的道路?

+1

你能詳細說明你的代碼「不起作用」嗎?你在期待什麼,究竟發生了什麼?如果您遇到異常,請發佈它發生的行和異常詳細信息。 – gunr2171

+0

查看問題編輯 – Bypp

+0

更多編輯! – Bypp

回答

0

找到一個可行的解決方案!以下是Android上的流媒體資產路徑,返回只能由WWW對象讀取的路徑。所以我只是用WWW對象讀取它,然後在我的持久數據路徑中重新創建文件。添加了一個檢查來確保文件在創建之前不存在。另外,請確保你創建的目錄不存在,否則你會得到一個錯誤。請注意,如果您有大量經常訪問的文件,則此解決方案可能不是最佳選擇。

string realPath = Application.persistentDataPath + "/PATH/" + fileName; 

    if (!System.IO.File.Exists(realPath)) 
    { 
     if (!System.IO.Directory.Exists(Application.persistentDataPath + "/PATH/")) 
     { 
      System.IO.Directory.CreateDirectory(Application.persistentDataPath + "/PATH/"); 
     } 

     WWW reader = new WWW(Application.streamingAssetsPath + "/PATH/" + realPath); 
     while (! reader.isDone) {} 

     System.IO.File.WriteAllBytes(realPath, reader.bytes); 
    } 

    Application.OpenURL(realPath); 

如果有人有任何要添加到此答案,請隨意!

+0

將在4小時內接受我的回答(由於某種原因,我現在無法執行此操作) – Bypp

0

我已經嘗試過Android上打開一個txt文件,使用此:

TextAsset txt = (TextAsset)Resources.Load("file", typeof(TextAsset)); 
string content = txt.text; 

哪裏file爲txt文件的名稱(不需要寫file.txt)。
變量字符串將包含文本文件的內容,你只需要遍歷他們算賬。

該方法要求:

using System.Text; 
using System.IO; 

file.txt一個名爲「資源」(內部資產目錄),目錄內,如果它不存在,然後創建一個新的。

+0

我期待在某個編輯器中打開該文件,而不是將其文本保存在字符串變量中,然後讀取它! – Bypp

0

這是我的Android代碼:

var rpath = Path.Combine(Application.streamingAssetsPath, "file_name"); 

    WWW www = new WWW(rpath); 
    yield return www; 
    StringReader streamReader = new StringReader(www.text); 
    text = streamReader.ReadToEnd(); 

對於iOS:

var rpath = Path.Combine(Application.streamingAssetsPath, "file_name"); 
    StreamReader streamReader = new StreamReader(rpath); 
    text = streamReader.ReadToEnd(); 

注:FILE_NAME在StreamingAssets文件夾

+0

我期待在某個編輯器中打開該文件,而不是將其文本保存在字符串變量中,然後讀取它! (請參閱上面的編輯問題) – Bypp