我可能有点麻烦我假设只是一个简单的 错误,但我找不到更好的解决方案错误, 现在我要做的是通过循环加载我的文件夹中的所有文件,直到达到最大数量
IEnumerator loadData()
{
Debug.Log (loadNum);
if (File.Exists (Application.persistentDataPath + "/data[" + loadNum + "].octa")) {
BinaryFormatter loadData = new BinaryFormatter ();
FileStream dataFile = File.Open (Application.persistentDataPath + "/data[" + loadNum + "].octa", FileMode.Open);
playerData pData = (playerData)loadData.Deserialize (dataFile);
dataFile.Close ();
name_O = pData.name;
job_O = pData.job;
difficulty_O = pData.difficulty;
rawAPD = name_O + "/" + job_O.ToString() + "/" + difficulty_O.ToString();
APD = new string[loadNum += 1];
for (var i = 0; i <= loadNum && i < loadNum; i++)
{
if (APD [i] == null)
{
APD [i] = rawAPD;
}
break;
}
yield return new WaitForSeconds (1);
if (loadNum != numOfSaveFile_O)
{
Debug.Log ("meh");
loadNum += 1;
reLoop ();
}
}
else
{
if (loadNum != numOfSaveFile_O)
{
loadNum += 1;
reLoop ();
}
}
}
void reLoop()
{
StartCoroutine (loadData ());
}
现在一切都在收益之后如预期的那样运作良好
数字从0跳到2
这里的场景是我的持久数据路径中有data[0]
和data[1]
文件
答案 0 :(得分:1)
我想做的是通过循环加载我的文件夹中的所有文件,直到 达到的最大数量。
您的代码看起来并不擅长。很多内存分配和不必要的重复协程函数调用。只需使用System.IO.Directory.GetFiles()
获取目录中文件的所有路径,然后将其存储在数组中。
我不知道APD
是什么,但是从你正在做的事情来看,你必须使用在for循环之前返回的项目数System.IO.Directory.GetFiles()
来初始化大小。
然后,您可以使用for
循环遍历数组并读取文件。只需调用以下功能一次。
IEnumerator loadData()
{
string fileDir = Application.persistentDataPath;
//Get All Files Path in in the Directory
string[] filePath = System.IO.Directory.GetFiles(fileDir);
//Initialize APD with the number of items in filePath
APD = new string[filePath.Length];
//Loop through them and read what's in there
for (int i = 0; i < filePath.Length; i++)
{
if ((i + 1) % 5 == 0)
{
yield return null;// Wait every after 5 file read
}
BinaryFormatter loadData = new BinaryFormatter();
FileStream dataFile = File.Open(filePath[i], FileMode.Open); //Open File
playerData pData = (playerData)loadData.Deserialize(dataFile);
dataFile.Close();
name_O = pData.name;
job_O = pData.job;
difficulty_O = pData.difficulty;
rawAPD = name_O + "/" + job_O.ToString() + "/" + difficulty_O.ToString();
APD[i] = rawAPD;
}
}
如果您只想阅读1
到numOfSaveFile_O
的{{1}}扩展名的文件而不是文件夹中的所有文件,那么下面是您的代码应该是什么样子。这假定您的文件的名称类似于.octa
,data[0].octa
,data[1].octa
,data[2].octa
....
data[3].octa
答案 1 :(得分:0)
从评论来看,这似乎是你所需要的;改变这个:
APD = new string[loadNum += 1];
到此:
APD = new string[loadNum + 1];