我目前在Unity3D工作,希望在点击按钮后打开一个.txt文件。
编辑:当我说打开.txt文件时,我的意思是在设备上的某个编辑器中打开它,而不是打开它,并将其内容保存到我的应用程序中的某些字符串中。有点像打开浏览器从应用程序访问网站。这是我目前的代码(C#):
private void ShowTextFile(string fileName)
{
Application.OpenURL(Application.streamingAssetsPath + "/PATH/" + fileName);
}
但它不起作用!我错过了什么?
编辑:我期望.txt文件在另一个窗口中打开(例如打开Web浏览器),但它根本就没有做任何事情。甚至没有收到错误。EDIT2:我尝试使用Application.persistentDataPath,在这两种情况下,它都说我的.txt文件不存在。但是,在使用Application.persistentDataPath时,它会打开一个消息框,询问我要打开文件的内容。无论我选择什么,它都会给我一个错误,告诉我错误加载文件或类似的东西。我也注意到它打开了“file:///”。在路径之前有文件:///是否正常?
EDIT3(我好起火!):我认为这个问题可能与“。”有关。在我的路径中(数据路径中的com.me.myapp)。有什么方法可以避免这种情况吗?我是否正在寻找正确的道路?
答案 0 :(得分:0)
我之前尝试在Android上打开txt文件,使用:
TextAsset txt = (TextAsset)Resources.Load("file", typeof(TextAsset));
string content = txt.text;
其中file
是txt文件的名称(不需要写file.txt
)。
变量字符串将包含文本文件的内容,您只需要在之后循环它们。
此方法需要:
using System.Text;
using System.IO;
将file.txt
放在名为" Resources"的目录中。 (在资产目录内),如果不在那里则创建一个新的。
答案 1 :(得分:0)
这是我的Android代码:
var rpath = Path.Combine(Application.streamingAssetsPath, "file_name");
WWW www = new WWW(rpath);
yield return www;
StringReader streamReader = new StringReader(www.text);
text = streamReader.ReadToEnd();
对于iOS:
var rpath = Path.Combine(Application.streamingAssetsPath, "file_name");
StreamReader streamReader = new StreamReader(rpath);
text = streamReader.ReadToEnd();
注意:StreamingAssets文件夹中的file_name
答案 2 :(得分:0)
找到有效的解决方案!在这里,Android上的流媒体资源路径返回一个只能由WWW对象读取的路径。所以我只是用WWW对象读取它,然后在我的持久数据路径中重新创建文件。添加了一项检查,以确保在创建文件之前该文件尚未存在。此外,请确保您创建目录,以防它不存在,否则您将收到错误。请注意,如果您有经常访问的大型文件,则此解决方案可能不是最佳选择。
string realPath = Application.persistentDataPath + "/PATH/" + fileName;
if (!System.IO.File.Exists(realPath))
{
if (!System.IO.Directory.Exists(Application.persistentDataPath + "/PATH/"))
{
System.IO.Directory.CreateDirectory(Application.persistentDataPath + "/PATH/");
}
WWW reader = new WWW(Application.streamingAssetsPath + "/PATH/" + realPath);
while ( ! reader.isDone) {}
System.IO.File.WriteAllBytes(realPath, reader.bytes);
}
Application.OpenURL(realPath);
如果有人有任何要添加到这个答案,请随意!