- [/align][/backcolor][backcolor=#f5f5f5]void readFile(string file)
- {
- path = "jar:file://" + Application.dataPath + "!/assets/" + file;[/backcolor]
- [backcolor=#f5f5f5] if (File.Exists(path))
- {
- stringToEdit = "yes";
- }
- else
- {
- stringToEdit = "no";[/backcolor]
- [backcolor=#f5f5f5] WWW www = new WWW(path);
- while (!www.isDone) { }[/backcolor]
- [backcolor=#f5f5f5] stringToEdit += " " + [url=http://www.text]www.text[/url];[/backcolor]
- [backcolor=#f5f5f5] }
- }
复制代码
不知道为什么 File.Exists(path)会检测不到文件,,,不过能读取就可以了
说下
Application.persistentDataPath 是指向 android /data/data/xxx.xxx.xxx/files/Application.dataPath 是指向 /data/app/xxx.xxx.xxx.apk
汗:
http://game.ceeger.com/Manual/StreamingAssets.html 这是unity圣典翻译好了,写得很详细了,,,
难怪会检测不到文件..现在还在解决解包问题
然后复制到 Application.persistentDataPath
/////////////////////////////////////最终方式/////////////////////////////////////////
using UnityEngine;
using System.Collections;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Core;
using System;
public class Test : MonoBehaviour
{
string path = "";
string zip_file = "d:\\t.zip";
void Start()
{
path = "jar:file://" + Application.dataPath + "!/assets/";
//readFile("test.txt");
// File.WriteAllText(Application.persistentDataPath + "/xx2.txt", "xxxxxxxxxxxxxxxxxxxx");
UnZipFile(Application.dataPath, "assets");
}
#region 解压资料处理fn
//判断是否已经解压
bool checkDecompressingFiles(string flag_file)
{
if (!File.Exists(Application.persistentDataPath + "/" + flag_file))
{
File.WriteAllText(Application.persistentDataPath + "/" + flag_file, "a");
return false;
}
return true;
}
/*
* 没有测试过
ICSharpCode.SharpZipLib.Zip.FastZip zip = new ICSharpCode.SharpZipLib.Zip.FastZip();
zip.CreateZip("C:\\foo.zip", "C:\\待压缩的文件夹", true, ""); //第三个参数表示是否压缩子文件夹
zip.ExtractZip("C:\\foo.zip", "C:\\压缩后存放的文件夹", "");
如果我们只想压缩目录中的一个或部分文件,或者我们只想解压文件中的一个或部分文件,怎么办呢?那就得把最后一个参数用上,它是字符串类型的正则表达式,比如只压缩 ini 文件用:"^.*(.ini)$"。
*/
//用第三方工具去读取 zip
void UnZipFile(string zipFilePath,string dir)
{
if (checkDecompressingFiles("init.txt")) {
stringToEdit += " 已经解压过了";
return;
}else
stringToEdit += " 第一次解压";
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(theEntry.Name);
string fileName = Path.GetFileName(theEntry.Name);
// print("directoryName:" + directoryName);
// print("fileName:" + fileName);
if (directoryName.Length > 0 && directoryName.Contains(dir))
{
//stringToEdit += " directoryName:" + directoryName+"\n";
Directory.CreateDirectory(Application.persistentDataPath + "/" + directoryName);
if (fileName != string.Empty)
{
using (FileStream streamWriter = File.Create(Application.persistentDataPath + "/" + theEntry.Name))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
streamWriter.Write(data, 0, size);
else
break;
}
}
}
}
}
}
}
//没有测试过下面
void CreateZipFile(string filesPath, string zipFilePath)
{
if (!Directory.Exists(filesPath))
{
return;
}
try
{
string[] filenames = Directory.GetFiles(filesPath);
using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
{
s.SetLevel(9); // 压缩级别 0-9
//s.Password = "123"; //Zip压缩文件密码
byte[] buffer = new byte[4096]; //缓冲区大小
foreach (string file in filenames)
{
ZipEntry entry = new ZipEntry(Path.GetFileName(file));
//entry.DateTime = DateTime.Now;
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
s.Finish();
s.Close();
}
}
catch (Exception ex)
{
}
}
//直接用 unty www 去读取 jar 跟 zip 标准差不多吧
void readFile(string file)
{
path+= file;
if (File.Exists(path))
{
stringToEdit = "yes";
}
else
{
stringToEdit = "no";
WWW www = new WWW(path);
while (!www.isDone) { }
stringToEdit+=" ReadAllText:"+File.ReadAllText(path);
}
}
#endregion
//请输入一个字符串
private string stringToEdit = "";
void Update ()
{
//点击手机返回键关闭应用程序
if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) )
{
Application.Quit();
}
}
void OnGUI()
{
GUILayout.TextField("persistentDataPath:" + Application.persistentDataPath);
GUILayout.TextField("dataPath:" + Application.dataPath);
GUILayout.TextField("temporaryCachePath:" + Application.temporaryCachePath);