AssetSystem_AndroidFileHelper.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Collections.Generic;
  5. using System;
  6. using System.Text;
  7. /// <summary>
  8. /// 【此文件如果出错,请检查playerSetting是否为Android平台】
  9. /// 使用Application.persistentDataPath方式来创建文件,读写Xml文件.
  10. /// 注Application.persistentDataPath末尾没有“/”符号
  11. /// </summary>
  12. public class AssetSystem_AndroidFileHelper : MonoSingleton<AssetSystem_AndroidFileHelper>
  13. {
  14. /// <summary>
  15. /// 动态创建文件夹.
  16. /// </summary>
  17. /// <returns>The folder.</returns>
  18. /// <param name="path">文件创建目录.</param>
  19. /// <param name="FolderName">文件夹名(不带符号).</param>
  20. public string CreateFolder(string path, string FolderName)
  21. {
  22. string FolderPath = path + FolderName;
  23. if (!Directory.Exists(FolderPath))
  24. {
  25. Directory.CreateDirectory(FolderPath);
  26. }
  27. return FolderPath;
  28. }
  29. /// <summary>
  30. /// 创建文件[追加内容].
  31. /// </summary>
  32. /// <param name="path">完整文件夹路径.</param>
  33. /// <param name="name">文件的名称.</param>
  34. /// <param name="info">写入的内容.</param>
  35. public void CreateFile(string path, string name, string info)
  36. {
  37. //文件流信息
  38. StreamWriter sw;
  39. FileInfo t = new FileInfo(path + name);
  40. if (!t.Exists)
  41. {
  42. //如果此文件不存在则创建
  43. sw = t.CreateText();
  44. }
  45. else
  46. {
  47. //如果此文件存在则打开
  48. sw =t.AppendText();
  49. }
  50. //以行的形式写入信息
  51. sw.WriteLine(info);
  52. //关闭流
  53. sw.Close();
  54. //销毁流
  55. sw.Dispose();
  56. }
  57. /// <summary>
  58. /// 重写指定文件
  59. /// </summary>
  60. /// <param name="path"></param>
  61. /// <param name="name"></param>
  62. /// <param name="info"></param>
  63. public void ReWriteFileByString(string name, string info)
  64. {
  65. //AssetSystem_Log.Ins.Log("重写文件:" + name +"/"+info);
  66. StringBuilder versions = new StringBuilder(info);
  67. byte[] data = Encoding.UTF8.GetBytes(versions.ToString());
  68. LogHelper.Log("重写文件:" + AssetConfig_GlobalSetting.strVersionFileName + data);
  69. ReWriteFileByByte(AssetConfig_GlobalSetting.strVersionFileName, data);
  70. }
  71. /// <summary>
  72. /// 重写指定文件
  73. /// </summary>
  74. /// <param name="fileName"></param>
  75. /// <param name="data"></param>
  76. public void ReWriteFileByByte(string fileName, byte[] data)
  77. {
  78. LogHelper.Log("重写文件:" + AssetConfig_GlobalSetting.strLocalSavePath + fileName);
  79. DirectoryInfo myDirectoryInfo = new DirectoryInfo(AssetConfig_GlobalSetting.strLocalSavePath + fileName);
  80. if (myDirectoryInfo.Exists)
  81. {
  82. LogHelper.Log("找到指定文件!");
  83. }
  84. else
  85. {
  86. Directory.CreateDirectory(AssetConfig_GlobalSetting.strLocalSavePath);
  87. LogHelper.Log("创建指定文件夹Res");
  88. }
  89. // AssetSystem_Log.Ins.Log("重写文件:" +AssetConfig_GlobalSetting.strLocalSavePath+ fileName);
  90. FileStream stream = new FileStream(AssetConfig_GlobalSetting.strLocalSavePath + fileName, FileMode.Create);
  91. stream.Write(data, 0, data.Length);
  92. stream.Flush();
  93. stream.Close();
  94. }
  95. /// <summary>
  96. /// 读取文件.
  97. /// </summary>
  98. /// <returns>The file.</returns>
  99. /// <param name="path">完整文件夹路径.</param>
  100. /// <param name="name">读取文件的名称.</param>
  101. public ArrayList LoadFile2(string path, string name)
  102. {
  103. //使用流的形式读取
  104. StreamReader sr = null;
  105. try
  106. {
  107. sr = File.OpenText(path + name);
  108. }
  109. catch (Exception e)
  110. {
  111. //路径与名称未找到文件则直接返回空
  112. LogHelper.LogError("路径:" + path + "文件名:" + name + ",路径与名称未找到文件则直接返回空");
  113. return null;
  114. }
  115. string line;
  116. ArrayList arrlist = new ArrayList();
  117. while ((line = sr.ReadLine()) != null)
  118. {
  119. //一行一行的读取
  120. //将每一行的内容存入数组链表容器中
  121. arrlist.Add(line);
  122. }
  123. //关闭流
  124. sr.Close();
  125. //销毁流
  126. sr.Dispose();
  127. //将数组链表容器返回
  128. return arrlist;
  129. }
  130. /// <summary>
  131. /// StreamReader读取文件
  132. /// </summary>
  133. /// <returns></returns>
  134. public IEnumerator LoadFile(string inFile, string outFile )
  135. {
  136. //float percent = 0;
  137. float progress;
  138. try
  139. {
  140. System.IO.Stream st = new System.IO.FileStream(inFile, System.IO.FileMode.Open);
  141. System.IO.Stream so = new System.IO.FileStream(outFile, System.IO.FileMode.Create);
  142. long totalBytes = st.Length;
  143. long totalDownloadedByte = 0;
  144. byte[] by = new byte[10];
  145. int osize = st.Read(by, 0, (int)by.Length);
  146. while (osize > 0)
  147. {
  148. totalDownloadedByte = osize + totalDownloadedByte;
  149. so.Write(by, 0, osize);
  150. osize = st.Read(by, 0, (int)by.Length);
  151. progress = (float)totalDownloadedByte / (float)totalBytes * 100;
  152. //LogHelper.LogError(progress);
  153. //"当前补丁下载进度" + percent.ToString() + "%";
  154. AssetUI_ShowLog.Instance.logString = "当前补丁下载进度" + progress.ToString() + "%";
  155. }
  156. so.Close();
  157. st.Close();
  158. }
  159. catch(Exception e)
  160. {
  161. LogHelper.LogError(e.Message);
  162. }
  163. yield return null;
  164. //return percent;
  165. }
  166. //写入模型到本地
  167. IEnumerator loadassetbundle(string url)
  168. {
  169. WWW w = new WWW(url);
  170. yield return w;
  171. if (w.isDone)
  172. {
  173. byte[] model = w.bytes;
  174. int length = model.Length;
  175. //写入模型到本地
  176. CreateassetbundleFile(Application.persistentDataPath, "Model.assetbundle", model, length);
  177. }
  178. }
  179. /// <summary>
  180. /// 获取文件下所有文件大小
  181. /// </summary>
  182. /// <param name="filePath"></param>
  183. /// <returns></returns>
  184. public int GetAllFileSize(string filePath)
  185. {
  186. int sum = 0;
  187. if (!Directory.Exists(filePath))
  188. {
  189. return 0;
  190. }
  191. DirectoryInfo dti = new DirectoryInfo(filePath);
  192. FileInfo[] fi = dti.GetFiles();
  193. foreach (FileInfo f in fi)
  194. {
  195. if (f.Extension == ".zip")
  196. {
  197. sum += Convert.ToInt32(f.Length);
  198. }
  199. }
  200. return sum / 1024 / 1024;
  201. }
  202. /// <summary>
  203. /// 获取指定文件大小
  204. /// </summary>
  205. /// <param name="FilePath"></param>
  206. /// <param name="FileName"></param>
  207. /// <returns></returns>
  208. public int GetFileSize(string FilePath, string FileName)
  209. {
  210. int sum = 0;
  211. if (!Directory.Exists(FilePath))
  212. {
  213. return 0;
  214. }
  215. else
  216. {
  217. FileInfo Files = new FileInfo(@FilePath + FileName);
  218. sum += Convert.ToInt32(Files.Length / 1024);
  219. }
  220. return sum;
  221. }
  222. /// <summary>
  223. ///
  224. /// </summary>
  225. /// <param name="path"></param>
  226. /// <param name="name"></param>
  227. /// <param name="info"></param>
  228. /// <param name="length"></param>
  229. void CreateassetbundleFile(string path, string name, byte[] info, int length)
  230. {
  231. //文件流信息
  232. //StreamWriter sw;
  233. Stream sw;
  234. FileInfo t = new FileInfo(path + "//" + name);
  235. if (!t.Exists)
  236. {
  237. //如果此文件不存在则创建
  238. sw = t.Create();
  239. }
  240. else
  241. {
  242. //如果此文件存在则打开
  243. //sw = t.Append();
  244. return;
  245. }
  246. //以行的形式写入信息
  247. sw.Write(info, 0, length);
  248. //关闭流
  249. sw.Close();
  250. //销毁流
  251. sw.Dispose();
  252. }
  253. //读取本地AssetBundle文件
  254. IEnumerator LoadAssetbundleFromLocal(string path, string name)
  255. {
  256. //print("file:///" + path + "/" + name);
  257. WWW w = new WWW("file:///" + path + "/" + name);
  258. yield return w;
  259. if (w.isDone)
  260. {
  261. Instantiate(w.assetBundle.LoadAsset(name));
  262. }
  263. }
  264. /// <summary>
  265. /// 删除文件.
  266. /// </summary>
  267. /// <param name="path">删除完整文件夹路径.</param>
  268. /// <param name="name">删除文件的名称.</param>
  269. public void DeleteFile(string path, string name)
  270. {
  271. File.Delete(path + name);
  272. }
  273. /// <summary>
  274. /// 删除文件
  275. /// </summary>
  276. /// <param name="path"></param>
  277. /// <param name="filesName"></param>
  278. /// <returns></returns>
  279. public bool DeleteFiles(string path, string filesName)
  280. {
  281. bool isDelete = false;
  282. try
  283. {
  284. if (Directory.Exists(path))
  285. {
  286. if (File.Exists(path + "\\" + filesName))
  287. {
  288. File.Delete(path + "\\" + filesName);
  289. isDelete = true;
  290. }
  291. }
  292. }
  293. catch
  294. {
  295. return isDelete;
  296. }
  297. return isDelete;
  298. }
  299. }