2017-09-06 751 views
0

我想保存一個圖像文件到組容器使用iMessage擴展作爲由Unity生成的貼紙,所以我寫了一個ios插件來獲取容器路徑和數據保存到相應的路徑,我已經成功地獲取路徑這是無法將文件保存到AppGroup的共享容器與統一ios

/private/var/mobile/Containers/Shared/AppGroup/1C848C27-6215-4C6F-98A9-E42E7794826D 

,但不能將其保存由於以下異常:

IsolatedStorageException: Could not find a part of the path "/private/var/mobile/Containers/Shared/AppGroup/1C848C27-6215-4C6F-98A9-E42E7794826D/Documents/0.jpg". 
    at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) [0x00000] in <filename unknown>:0 
    at System.IO.File.Create (System.String path, Int32 bufferSize) [0x00000] in <filename unknown>:0 
    at TestSharedContainer.saveImageToFolder() [0x00000] in <filename unknown>:0 
    at TestSharedContainer.OnGUI() [0x00000] in <filename unknown>:0 

我使用保存文件以下代碼c#

string fs_share_path = containerPath + "/0.jpg"; 
Debug.Log("writing :" + fs_share_path); 
FileStream fs_share = File.Create(fs_share_path); 
fs_share.Write(text.EncodeToJPG(), 0, text.EncodeToJPG().Length); 
fs.Close(); 

如何使這項工作?

回答

1

我從來沒有見過任何一個通過獲取路徑並嘗試從C#寫入它的工作。另外,我試過這個,但也失敗了。我想你不能從C#做到這一點。

我發現爲此工作的唯一方法是將寫入函數移動到插件。使用Object-C編寫寫入該目錄的函數。這個Object-C函數應該有兩個參數:數據(byte[])和文件名(string)。然後,您可以從C#中調用該函數,並將數據傳遞到Object-C插件以保存並將文件名稱。

+0

感謝您的建議,我會嘗試這一點,我唯一擔心的是如果在將大量數據傳遞給本地插件函數時會出現一些坑,我必須努力。 – armnotstrong

+0

我知道。這很煩人,但你會習慣它。我使用C/C++來完成它,然後從C++函數調用Object-C函數。這很容易,然後試圖直接從Object-C做到這一點。在發送到C/C++之前,不要忘記在C#中編寫數組。參見[這裏](https://stackoverflow.com/a/44424465/3785314)例如從C#發送數組到C/C++。 – Programmer

+0

感謝參考,我現在想製作一個本地函數,將文件從它擁有的容器移動到共享容器,這對我來說可能是一個簡單的操作方式,我對這個插件和我的項目我必須保存到擁有的容器:D – armnotstrong

0

我注意到Unity的Application.persistentDataPath在iOS上返回從/var/mobile/Containers/Data/Application/開始的路徑。

我已經嘗試了中介AppGroups的容器路徑,使它開始於/var/mobile/Containers/Shared/AppGroup/,它使文件從C#/ Unity端寫入/讀取工作。

相關問題