Unity數據存儲路徑總結


 

一.在項目根目錄中創建Resources文件夾來保存文件。
可以使用Resources.Load("文件名字,注:不包括文件后綴名");把文件夾中的對象加載出來。
注:此方可實現對文件實施“增刪查改”等操作,但打包后不可以更改了

二.直接放在項目根路徑下來保存文件
在直接使用Application.dataPath來讀取文件進行操作。
注:移動端是沒有訪問權限的。

三.在項目根目錄中創建StreamingAssets文件夾來保存文件
1.可使用Application.dataPath來讀取文件進行操作。
2.直接使用Application.streamingAssetsPath來讀取文件進行操作。
注:此方法在pc/Mac電腦中可實現對文件實施“增刪查改”等操作,但在移動端只支持讀取操作。


四.使用Application.persistentDataPath來操作文件(薦)
該文件存在手機沙盒中,因為不能直接存放文件,
1.通過服務器直接下載保存到該位置,也可以通過Md5碼比對下載更新新的資源
2.沒有服務器的,只有間接通過文件流的方式從本地讀取並寫入Application.persistentDataPath文件下,然后再通過Application.persistentDataPath來讀取操作。
注:在Pc/Mac電腦 以及android跟Ipad、ipone都可對文件進行任意操作,另外在IOS上該目錄下的東西可以被iCloud自動備份。

五.使用Application.temporaryCachePath來操作文件

操作方式跟上面Application.persistentDataPath類似。除了在IOS上不能被iCloud自動備份。

IOS:
Application.dataPath : Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data
Application.streamingAssetsPath : Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw
Application.persistentDataPath : Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents
Application.temporaryCachePath : Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches


android:
Application.dataPath : /data/app/xxx.xxx.xxx.apk
Application.streamingAssetsPath : jar:file:///data/app/xxx.xxx.xxx.apk/!/assets
Application.persistentDataPath : /data/data/xxx.xxx.xxx/files
Application.temporaryCachePath : /data/data/xxx.xxx.xxx/cache


Windows Web Player:
Application.dataPath : file:///D:/MyGame/WebPlayer (即導包后保存的文件夾,html文件所在文件夾)
Application.streamingAssetsPath :
Application.persistentDataPath :
Application.temporaryCachePath : 


注意:
Application.persistentDataPath 才是移動端可用的保存生成文件的地方
放到resource中打包后不可以更改了
放到Application .dataPath中移動端是沒有訪問權限的

===================================================
如何查看iPhone文件存放目錄?首先需要越獄,越獄后打開iPhone手機目錄,找到/Applications目錄下就是iPhone所有軟件目錄。


iPhone文件目錄介紹


1、/Applications


常用軟件的安裝目錄。


2. /private ar/ mobile/Media /iphone video Recorder


iphone video Recorder錄像文件存放目錄。


3. /private ar/ mobile/Media /DCIM


相機拍攝的照片文件存放目錄。


4、/privatear/ mobile /Media/iTunes_Control/Music


iTunes上傳的多媒體文件(例如MP3、MP4等)存放目錄,文件沒有被修改,但是文件名字被修改了,直接下載到電腦即可讀取。


5、/private ar/root/Media/EBooks


熊貓看書存放目錄。


6、/Library/Ringtones


系統自帶的來電鈴聲存放目錄。


7、/System/Library/Audio/UISounds


短信記其它系統默認效果鈴聲(m4r鈴聲文件改擴展名為.caf)短信鈴聲文件名為sms-received開頭的caf文件。


8、/privatear/ mobile /Library/AddressBook


系統電話本的存放目錄。


/privatear/mobile/Library/SMS


短信存放目錄


9、/private ar/ mobile/Media /iphone Recorder


iPhone Recorder錄音軟件文件存放目錄


10、/Applications/Preferences.app/zh_CN.lproj


軟件Preferences.app的中文漢化文件存放目錄


11、/Library/Wallpaper


系統q1ang紙的存放目錄


12、/System/Library/Audio/UISounds


系統聲音文件的存放目錄


13、/privatear/root/Media/PXL


ibrickr上傳安裝程序建立的一個數據庫,估計和windows的uninstall記錄差不多。


14、/bin


和linux系統差不多,是系統執行指令的存放目錄。


15、/privatear/ mobile /Library/SMS


系統短信的存放目錄


16、/privatear/run


系統進程運行的臨時目錄?(查看這里可以看到系統啟動的所有進程)


17、/privatear/logs/CrashReporter


系統錯誤記錄報。 
若有不足歡迎指正!!!

 

 

 

一.在項目根目錄中創建Resources文件夾來保存文件。
可以使用Resources.Load("文件名字,注:不包括文件后綴名");把文件夾中的對象加載出來
注:此方可實現對文件實施“增刪查改”等操作,但打包后不可以更改了

二.直接放在項目根路徑下來保存文件
在直接使用Application.dataPath來讀取文件進行操作。
注:移動端是沒有訪問權限的。

三.在項目根目錄中創建StreamingAssets文件夾來保存文件
1.可使用Application.dataPath來讀取文件進行操作。

[C#]  純文本查看 復制代碼

#if UNITY_EDITOR
string filepath = Application.dataPath +"/StreamingAssets"+"/my.xml";
#elif UNITY_IPHONE
string filepath = Application.dataPath +"/Raw"+"/my.xml";
#elif UNITY_android
string filepath = "jar:file://" + Application.dataPath + "!/assets/"+"/my.xml;
#endif


2.直接使用Application.streamingAssetsPath來讀取文件進行操作。
注:此方法在pc/Mac電腦中可實現對文件實施“增刪查改”等操作,但在移動端只支持讀取操作。

四.使用Application.persistentDataPath來操作文件(
該文件存在手機沙盒中,因為不能直接存放文件,
1.通過服務器直接下載保存到該位置,也可以通過Md5碼比對下載更新新的資源
2.沒有服務器的,只有間接通過文件流的方式從本地讀取並寫入Application.persistentDataPath文件下,然后再通過Application.persistentDataPath來讀取操作。
注:在Pc/Mac電腦 以及Android跟Ipad、ipone都可對文件進行任意操作,另外在IOS上該目錄下的東西可以被iCloud自動備份

五.使用Application.temporaryCachePath來操作文件

操作方式跟上面Application.persistentDataPath類似。除了在IOS上不能被iCloud自動備份。

下圖是幾種文件在Pc中路徑的具體位置
<ignore_js_op> 

其實,在前面我已經發過一篇《Unity中的Path對應各平台中的Path》的文章,大家可以看看,詳細了解下unity在移動平台中的可操作的具體路徑。
有直接給出各平台對應路徑喲,方便調試查看。
好了,unity路徑的使用以及注意點都總結了,現在還是送點干料給大家吧,里面都有詳細注釋,都是開發中常用的東西

本帖隱藏的內容

1.對文件的操作類,主要就是文流讀取操作的一些東西(包括Assetbundle)
FileHelper.cs
[C#]  純文本查看 復制代碼

using UnityEngine;
using System.Collections;
using System.IO;
using System.Collections.Generic;
using System;
/// <summary>
/// 使用Application.persistentDataPath方式來創建文件,讀寫Xml文件.
/// 注Application.persistentDataPath末尾沒有“/”符號
/// </summary>
public class FileHelper: MonoBehaviour
{
/// <summary>
/// 動態創建文件夾.
/// </summary>
/// <returns>The folder.</returns>
/// <param name="path">文件創建目錄.</param>
/// <param name="FolderName">文件夾名(不帶符號).</param>
public string CreateFolder(string path,string FolderName)
{
string FolderPath = path+FolderName;
if(!Directory.Exists(FolderPath))
{
Directory.CreateDirectory(FolderPath);
}
return FolderPath;
}

/// <summary>
/// 創建文件.
/// </summary>
/// <param name="path">完整文件夾路徑.</param>
/// <param name="name">文件的名稱.</param>
/// <param name="info">寫入的內容.</param>
public void CreateFile(string path,string name,string info)
{
//文件流信息
StreamWriter sw;
FileInfo t = new FileInfo(path+name);
if(!t.Exists)
{
//如果此文件不存在則創建
sw = t.CreateText();
}
else
{
//如果此文件存在則打開
sw = t.AppendText();
}
//以行的形式寫入信息
sw.WriteLine(info);
//關閉流
sw.Close();
//銷毀流
sw.Dispose();
}

/// <summary>
/// 讀取文件.
/// </summary>
/// <returns>The file.</returns>
/// <param name="path">完整文件夾路徑.</param>
/// <param name="name">讀取文件的名稱.</param>
public ArrayList LoadFile(string path,string name)
{
//使用流的形式讀取
StreamReader sr =null;
try{
sr = File.OpenText(path+name);
}catch(Exception e)
{
//路徑與名稱未找到文件則直接返回空
return null;
}
string line;
ArrayList arrlist = new ArrayList();
while ((line = sr.ReadLine()) != null)
{
//一行一行的讀取
//將每一行的內容存入數組鏈表容器中
arrlist.Add(line);
}
//關閉流
sr.Close();
//銷毀流
sr.Dispose();
//將數組鏈表容器返回
return arrlist;
}
//寫入模型到本地
IEnumerator loadassetbundle(string url)
{
WWW w = new WWW(url);
yield return w;
if (w.isDone)
{
byte[] model = w.bytes;
int length = model.Length;
//寫入模型到本地
CreateassetbundleFile(Application.persistentDataPath, "Model.assetbundle", model,length);
}
}
/// <summary>
/// 獲取文件下所有文件大小
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public int GetAllFileSize(string filePath)
{
int sum = 0;
if (!Directory.Exists(filePath))
{
return 0;
}

DirectoryInfo dti = new DirectoryInfo(filePath);

FileInfo[] fi = dti.GetFiles();

foreach (FileInfo f in fi)
{

sum += Convert.ToInt32(f.Length / 1024);
}

DirectoryInfo[] di = dti.GetDirectories();

if (di.Length > 0)
{
for (int i = 0; i < di.Length; i++)
{
sum += GetAllFileSize(di.FullName);
}
}
return sum;
}
/// <summary>
/// 獲取指定文件大小
/// </summary>
/// <param name="FilePath"></param>
/// <param name="FileName"></param>
/// <returns></returns>
public int GetFileSize(string FilePath, string FileName)
{
int sum = 0;
if (!Directory.Exists(FilePath))
{
return 0;
}
else
{
FileInfo Files = new FileInfo(@FilePath + FileName);
sum += Convert.ToInt32(Files.Length / 1024);
}
return sum;
}
void CreateassetbundleFile(string path, string name, byte[] info, int length)
{
//文件流信息
//StreamWriter sw;
Stream sw;
FileInfo t = new FileInfo(path + "//" + name);
if (!t.Exists)
{
//如果此文件不存在則創建
sw = t.Create();
}
else
{
//如果此文件存在則打開
//sw = t.Append();
return;
}
//以行的形式寫入信息
sw.Write(info, 0, length);
//關閉流
sw.Close();
//銷毀流
sw.Dispose();
}
//讀取本地AssetBundle文件
IEnumerator LoadAssetbundleFromLocal(string path, string name)
{
print("file:///" + path + "/" + name);

WWW w = new WWW("file:///"+path + "/" + name);

yield return w;

if (w.isDone)

{
Instantiate(w.assetBundle.mainAsset);
}
}

/// <summary>
/// 刪除文件.
/// </summary>
/// <param name="path">刪除完整文件夾路徑.</param>
/// <param name="name">刪除文件的名稱.</param>
public void DeleteFile(string path, string name)
{
File.Delete(path + name);
}
/// <summary>
/// 刪除文件
/// </summary>
/// <param name="path"></param>
/// <param name="filesName"></param>
/// <returns></returns>
public bool DeleteFiles(string path, string filesName)
{
bool isDelete = false;
try
{
if (Directory.Exists(path))
{
if (File.Exists(path + "\\" + filesName))
{
File.Delete(path + "\\" + filesName);
isDelete = true;
}
}
}
catch
{
return isDelete;
}
return isDelete;
}
}


2.隨機操作類
RandomHelper.cs
[C#]  純文本查看 復制代碼

using UnityEngine;
using System.Collections;
/// <summary>
/// 隨機操作類
/// </summary>
public class RandomHelper
{
private static char[] constant = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
/// <summary>
/// 字符串隨機
/// </summary>
/// <param name="Length">要隨機的位數</param>
/// <returns></returns>
public string GenerateRandomNumber(int Length)
{
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62);
for (int i = 0; i < Length; i++)
{
newRandom.Append(constant[Random.Range(0,62)]);
}
return newRandom.ToString();
}
private static char[] constant1 = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
/// <summary>
/// 數字隨機
/// </summary>
/// <param name="Length">要隨機的位數</param>
/// <returns></returns>
public string GenerateNumber(int Length)
{
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(10);
for (int i = 0; i < Length; i++)
{
newRandom.Append(constant1[Random.Range(0, 10)]);
}
return newRandom.ToString();
}
/// <summary>
/// 字符串數組隨機
/// </summary>
/// <param name="chars">數組</param>
/// <param name="Length">隨機的位數</param>
/// <returns></returns>
public string GetStrRandomSurname(string[] chars, int Length)
{
int count = chars.Length;
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(count);

for (int i = 0; i < Length; i++)
{
newRandom.Append(chars[Random.Range(0, count)]);
}
return newRandom.ToString();
}
/// <summary>
/// 字符串*截取
/// </summary>
/// <param name="str">字符串</param>
/// <returns></returns>
public string[] getStringToList(string str)
{
return str.Split('*');
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM