在此使用Unity 5.6(我知道,过时的 =-()。如何从Assets文件夹外部导入文本文件?这将由用户(我自己的自定义改装系统)输入。我需要以编程方式将文本文件的内容导入到字符串变量中。
谁能教我该怎么做?
答案 0 :(得分:2)
仅做类似事情的问题
string pathToFile = @"C:\somepath\sometextfile.txt";
string textFromFile = System.IO.File.ReadAllText(pathToFile);
是在许多操作系统(例如Android,iOS,HoloLens)上运行的应用程序在沙箱中,对操作系统文件系统的访问非常有限(如果未明确授予)。
因此在Unity中,Application.persitentDataPath
的用途基本上是这样。应用程序和操作系统都可以访问它(例如,以后用于更改文本文件)。
为了减轻麻烦,我通常会这样做
private static string DataPath
{
get
{
#if UNITY_EDITOR
return Application.streamingAssetsPath;
#else
return Application.persistentDataPath;
#endif
}
}
这只是在您进入编辑器时使用文件夹<yourUnityProject>/Assets/StreamingAssets
,以便在测试过程中不会将bload
数据输入到PC的持久数据路径中。
稍后,它会使用特定于应用程序的文件夹(取决于您的操作系统-请参见上面的链接)。
在编辑器中,创建文件夹Assets/StreamingAssets
并将您的.txt
文件放在此处。
您可以使用
阅读public static string ReadFromFile(string fileName)
{
var filePath = Path.Combine(DataPath, fileName);
//only needed if you choose option 1 in the next step
var copyFile = false;
// Check if file exists
if (!File.Exists(filePath))
{
// if the file does not exist (especially later in a build)
// you have multiple options
// I would decide between the following three
// OPTION 1
// read in the text from streaming assets instead
// the first time and create a new file from that content
filePath = Path.Combine(Application.streamingAssetsPath, fileName);
copyFile = true;
// Note: as fallback if this also does not exist use one of the other two options
// OPTION 2
// Alternatively you might rather want to instead create
// the file with some default content and change it later
WriteToFile(fileName, "some default content");
// OPTION 3
// simply throw an error an do nothing
Debug.LogErrorFormat("Error reading {0}\nFile does not exist!", filePath);
return null;
}
// Read in data from file
using (var file = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var streamReader = new StreamReader(file, Encoding.UTF8))
{
//this check is only needed for option 1
// otherwise only use the else part
if(copyFile)
{
var output = streamReader.ReadToEnd();
WriteToFile(fileName, output);
return output;
}
else
{
return streamReader.ReadToEnd();
}
}
}
}
并使用
书写public static void WriteToFile(string fileName, string content)
{
var filePath = Path.Combine(DataPath, fileName);
// Create file or overwrite if exists
using (var file = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.Write))
{
using (var writer = new StreamWriter(file, Encoding.UTF8))
{
writer.Write(content);
}
}
Debug.LogFormat("Written to {0}", filePath);
}
您可以将上述代码简单地放在public static class
中,例如像
public static class File
{
//...
}
您以后可以从任何地方调用它,
File.ReadFromFile("MyFile.txt");
无需参考。
答案 1 :(得分:1)
您可以通过以下方式阅读文本文件:
string pathToFile = @"C:\somepath\sometextfile.txt";
string textFromFile = System.IO.File.ReadAllText(pathToFile);
// Use the data