【问题标题】:file streamer crashes unity文件流媒体崩溃统一
【发布时间】:2016-08-18 18:44:38
【问题描述】:

我正在尝试为我正在使用此代码的应用保存数据:

BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/inventorySave.gd"); 
bf.Serialize(file, toSave);
file.Close();

我也试过这段代码:

StreamWriter sw = new StreamWriter(Application.persistentDataPath + "/inventorySave.txt");
sw.WriteLine(toSave);
print("wrote line" + toSave);
sw.Flush();
sw.Close();    

但它们似乎都不起作用(我的统一崩溃并且我在控制台中没有收到任何错误)。在 for 循环中调用保存,我试图保存少于 8 个字符的字符串,代码可以在 here 找到。

【问题讨论】:

  • 您是在 try-catch 块中执行此操作吗?此外,您应该在 using 块内执行 StreamWriter,然后无需显式刷新/关闭。
  • 是的,在try catch里面,循环了32次,循环会不会崩溃?
  • 这可以..是的。如果您的计算机速度不够快或者您正在做很多事情。 32 次似乎很多。
  • 请勿出于任何原因使用“STREAM WRITER” 这是 Unity 中的无穷无尽的困惑。 stackoverflow.com/a/35941579/294884

标签: c# unity3d filestream


【解决方案1】:

这是我在你的代码某处发现的:

for (int i = 0; i <= numbers.Length ; i++)
            {
                print("inside while class");
                switch (int.Parse(numbers[i--].ToString()))
                {
                    case 0:
                        finalString[i--] = "a".ToString(); break;
                    case 1:
                        finalString[i--] = "b".ToString(); break;
                    case 2:
                        finalString[i--] = "c".ToString(); break;
                    case 3:
                        finalString[0] = "d".ToString(); break;
                    case 4:
                        finalString[i--] = "e".ToString(); break;
                    case 5:
                        finalString[i--] = "f".ToString(); break;
                    case 6:
                        finalString[i--] = "g".ToString(); break;
                    case 7:
                        finalString[i--] = "h".ToString(); break;
                    case 8:
                        finalString[i--] = "i".ToString(); break;
                    case 9:
                        finalString[i--] = "j".ToString(); break;
                }

                i++;

在每次迭代中,变量 i 都会发生这种情况:

  1. int i = 0; // in start of for loop i is "0".

  2. switch (int.Parse(numbers[i--].ToString())) // i = -1 here

  3. finalString[i--] = "a".ToString(); break; // in any of case statement, i = -2

  4. i++; // i = -1 here
  5. i++; // i = 0 here

因此:i 的值将始终为 0,并且永远不会大于 numbers.Length,因此循环不会终止。

因此: 无限循环 -> Unity 崩溃

【讨论】:

  • 最后一件事,因为这会告诉你它为什么会崩溃。如果您发布 实际 代码而不只是一个 sn-p,如果会更有帮助。
  • 日志中的最后一条消息被标记为“(这条消息是无害的)”,其他我不理解的东西
  • 是的,它在 try catch 中,并且循环了 32 次,循环会使其崩溃吗? 关于这一点,我希望看到完整的代码 sn-p,包括循环以及方法中的所有其他内容
  • w8我需要给你premmission还是smth?,我是第一次使用堆栈溢出...
  • @Patrik 你不能投票,因为你没有足够的声誉,但你应该接受这个答案,因为它解决了你的问题。
猜你喜欢
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
相关资源
最近更新 更多