Я пытаюсь восстановить файл из моих streamingAssets и сделать его копию в persistentDataPath.Unity - IOS persistentDataPath access denied // Не удалось открыть базу данных
Проблема в том, что доступ к persistentDataPath запрещен iOS, поэтому я не могу записать файл, может ли кто-нибудь сказать мне, почему?
Код:
#elif UNITY_IOS
if (File.Exists(Application.dataPath + "/Raw/" + StaticDatas.databaseName))
{
byte[] bytes = null;
if (File.Exists(Application.dataPath + "/Raw/" + StaticDatas.databaseName))
{
Debug.Log(Application.dataPath + "/Raw/" + StaticDatas.databaseName);
Debug.Log(StaticDatas.databasePath + StaticDatas.databaseName);
using (FileStream fileStream = File.OpenRead(Application.dataPath + "/Raw/" + StaticDatas.databaseName))
{
bytes = new byte[fileStream.Length];
fileStream.Read(bytes,0,int.Parse(fileStream.Length+""));
fileStream.Close();
fileStream.Dispose();
}
FileStream fs = File.Create(StaticDatas.databasePath + StaticDatas.databaseName);
fs.Write(bytes, 0, bytes.Length);
}
_connection = new SQLiteConnection(filePath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create);
CreateDB();
}
Ошибка: Доступ к пути /var/mobile/containers/dta/application/manythings/DocumentsDatabaseName.db "Отказано
IOS: 9.5.3 Unity : 5.5.0f3
----------------------------------------- -----------------------
UPDATE: StaticDatas.databasePath = persistentDataPath
------------------------------------ ----------------------------
UPDATE 2:
Ну, я полностью потерял ...
Вот код, у меня есть:
#elif UNITY_IOS
string basePath = Path.Combine(Application.dataPath + "Raw" , StaticDatas.databaseName);
string targetPath = Path.Combine(StaticDatas.databasePath , StaticDatas.databaseName);
Debug.Log(basePath);
Debug.Log(targetPath);
if (File.Exists(basePath))
{
byte[] bytes = null;
Debug.Log("base path exists");
using (FileStream fileStream = File.OpenRead(basePath))
{
Debug.Log("create byte array");
bytes = new byte[fileStream.Length];
Debug.Log(" READ BYTES");
fileStream.Read(bytes,0,int.Parse(fileStream.Length+""));
Debug.Log(" CLOSE");
fileStream.Close();
Debug.Log("DISPOSE");
fileStream.Dispose();
}
Debug.Log(" Check if dir exists");
/* if (!Directory.Exists(StaticDatas.databasePath + "/AnnotationTest.app/database/"))
{
Debug.Log(" create folder");
Directory.CreateDirectory(StaticDatas.databasePath + "/AnnotationTest.app/database/");
}*/
Debug.Log("Open file");
FileStream fs = File.Open(targetPath, FileMode.OpenOrCreate);
Debug.Log("Write file");
fs.Write(bytes, 0, bytes.Length);
Debug.Log(" CLOSE STRREAM");
fs.Close();
Debug.Log("Connec close");
_connection = new SQLiteConnection(targetPath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create);
Debug.Log("sql connect");
CreateDB();
Debug.Log(" db made");
}
if (File.Exists("file:" + Application.dataPath + "/Raw/" + StaticDatas.databaseName));
{
Debug.Log("file datapath raw databasename");
byte[] bytes = null;
Debug.Log("base path exists");
using (FileStream fileStream = File.OpenRead("file:" + Application.dataPath + "/Raw/" + StaticDatas.databaseName))
{
Debug.Log("create byte array");
bytes = new byte[fileStream.Length];
Debug.Log(" READ BYTES");
fileStream.Read(bytes,0,int.Parse(fileStream.Length+""));
Debug.Log(" CLOSE");
fileStream.Close();
Debug.Log("DISPOSE");
fileStream.Dispose();
}
FileStream fs = File.Open(targetPath, FileMode.OpenOrCreate);
Debug.Log("Write file");
fs.Write(bytes, 0, bytes.Length);
Debug.Log(" CLOSE STRREAM");
fs.Close();
_connection = new SQLiteConnection(targetPath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create);
CreateDB();
}
#else
var loadDb = StaticDatas.databasePath + StaticDatas.databaseName;
File.Copy(loadDb, filePath);
_connection = new SQLiteConnection(filePath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create);
CreateDB();
#endif
Первый, если s На протяжении некоторого времени (без combine
), но теперь, арахис.
Вторая возвращает истину (Exists
), но когда он достигает с помощью заявления, он говорит: «Не удалось найти часть пути» (даже если он находит его в, если заявление, WTF?)
------------------------------------------------ ----------------
UPDATE 3
Это чудо! Я нашел это! Wel, теперь SQLite не смог открыть базу данных, но я нашел ее!
string bpa = Application.dataPath + "/Raw/" + StaticDatas.databaseName;
if (File.Exists(bpa))
{
byte[] b = null;
using (FileStream fs = File.OpenRead(bpa))
{
b = new byte[fs.Length];
fs.Read(b, 0, int.Parse(fs.Length+""));
fs.Close();
fs.Dispose();
}
FileStream fsa = File.Open(targetPath, FileMode.OpenOrCreate);
fsa.Write(b,0, b.Length);
fsa.Close();
_connection = new SQLiteConnection(targetPath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create);
CreateDB();
}
else if (File.Exists(basePath))
{
byte[] b = null;
using (FileStream fs = File.OpenRead(basePath))
{
b = new byte[fs.Length];
fs.Read(b, 0, int.Parse(fs.Length+""));
fs.Close();
fs.Dispose();
}
FileStream fsa = File.Open(targetPath, FileMode.OpenOrCreate);
fsa.Write(b,0, b.Length);
fsa.Close();
_connection = new SQLiteConnection(targetPath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create);
CreateDB();
}
Так правильные pathseems быть:
string bpa = Application.dataPath + "/Raw/" + StaticDatas.databaseName;
---------------------------- ------------------------------------
UPDATE 4:
Ok, Я думаю, что знаю, в чем проблема (даже если я этого не понимаю):
теперь я могу получить от ДАННЫХ потоковых активов и скопировать его в persistentDatapath, но когда я создаю связь с файлом, SQLite бросает исключение:
Could not open database file
Кто-то знает, почему?
--------------------------------------------- ------------------- ОБНОВЛЕНИЕ 5:
Я делаю комбинат для создания пути «targetPath», в журналах он показывает «/ var/мобильный/контейнер/данных/приложений/manylettersanddigits/Документы/database.db»
Однако в SQLException, это показывает то же самое, но без косой черты между документами и database.db
Дубликат [этого] (http://stackoverflow.com/questions/41433761/file-create-fails-on-iphone-5s)? – Programmer
Посмотрите на него, спасибо – Andromelus
Я в замешательстве ... Почему вы спрашиваете о 'Application.persistantDataPath', но тогда в вашем коде вы используете' Application.dataPath? 'Я почти уверен, что http: // answer.unity3d.com/questions/209108/when-to-use-persistentdatapath-versus-datapath.html отвечает на ваш вопрос. – Zze