Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Unity中重新加载场景后StreamReader无法正常工作_C#_Unity3d_Streamreader - Fatal编程技术网

C# 在Unity中重新加载场景后StreamReader无法正常工作

C# 在Unity中重新加载场景后StreamReader无法正常工作,c#,unity3d,streamreader,C#,Unity3d,Streamreader,我有一个流阅读器,我正在使用它将数据解析到程序中。当我第一次从主菜单打开场景时,流读取器在解析数据时工作正常(我在代码段中省略了解析,因为代码很长)。第一次运行时,屏幕上的text.text输出为G。如果我返回主菜单,然后返回此场景,则text.text输出是文本文档的第一行,我的代码在其中读取text.text=行,我正在尝试找出原因。sr.Close()不是关闭流读取器的正确方法吗?还是该文件仍处于打开状态 void Start () { text.text = "A&qu

我有一个流阅读器,我正在使用它将数据解析到程序中。当我第一次从主菜单打开场景时,流读取器在解析数据时工作正常(我在代码段中省略了解析,因为代码很长)。第一次运行时,屏幕上的text.text输出为G。如果我返回主菜单,然后返回此场景,则text.text输出是文本文档的第一行,我的代码在其中读取text.text=行,我正在尝试找出原因。sr.Close()不是关闭流读取器的正确方法吗?还是该文件仍处于打开状态

void Start () {
    text.text = "A";
    trimAndPlaceDataSets = GetComponent<TrimAndPlaceDataSets> ();
    text.text = "B";
    string AthenaData = Application.streamingAssetsPath + "/Athena.txt";
    text.text = "C";
    PopulateAthenaData(AthenaData);
}

void PopulateAthenaData(string s){
    text.text = "D";
    using (StreamReader sr = new StreamReader(s)) {
        text.text = "E";
        string line = sr.ReadLine();
        text.text = line;
        while (line != null) {
            //Do Stuf
            sr.ReadLine();
        }
        sr.Close();
        text.text = "G";
    }
}

正确使用do close stream,这是因为StreamReader类实现了接口IDisposable,这允许使用using语句,该语句在作用域结束后自动调用SreamReader中的Dispose方法,并在该方法中清除资源和关闭打开的文件,如果需要,最后一步称为垃圾收集器

using (StreamReader sr = new StreamReader(s))
{
    //do stuff with stream reader
    //sr.Close();
}

正确使用do close stream,这是因为StreamReader类实现了接口IDisposable,这允许使用using语句,该语句在作用域结束后自动调用SreamReader中的Dispose方法,并在该方法中清除资源和关闭打开的文件,如果需要,最后一步称为垃圾收集器

using (StreamReader sr = new StreamReader(s))
{
    //do stuff with stream reader
    //sr.Close();
}
您的问题是关于“垃圾收集”(访问此Url:) 简单的回答是,C#可以在你使用它们之后释放(处置)很多东西,但像“文件”之类的东西不在其中。您必须在使用后释放它们,如果不这样做,您的文件将被打开,另一个进程无法访问该文件。您需要在工作完成后处理“StreamReader”。而“使用”则可以做到这一点(您不需要为此编写自定义处理器)

之后,文件将自动释放。

您的问题是关于“垃圾收集”(访问此Url:) 简单的回答是,C#可以在你使用它们之后释放(处置)很多东西,但像“文件”之类的东西不在其中。您必须在使用后释放它们,如果不这样做,您的文件将被打开,另一个进程无法访问该文件。您需要在工作完成后处理“StreamReader”。而“使用”则可以做到这一点(您不需要为此编写自定义处理器)


之后,文件将自动释放。

考虑使用“
using
”语句和实现
IDisposable
的类,如
StreamReader
。当
StreamReader
退出作用域时,它将自动关闭并处理,从而简化您的逻辑,特别是在考虑异常处理时。您如何将其加载回这些场景?运行游戏时是否使用LoadScene()?我使用的是主菜单中的SceneManager.LoadScene(字符串)。在编辑中添加了代码。请不要在问题中添加诸如“高级[sic]中的感谢”之类的注释。请考虑使用“<代码>使用< /代码>”语句,如“代码> StreamReader < /Cord>”,实现<代码> IDISPOSTABLE < /代码>。当
StreamReader
退出作用域时,它将自动关闭并处理,从而简化您的逻辑,特别是在考虑异常处理时。您如何将其加载回这些场景?运行游戏时是否使用LoadScene()?我使用的是主菜单中的SceneManager.LoadScene(字符串)。在编辑中添加了代码。请不要在问题中添加诸如“高级[sic]中的感谢”之类的注释。请参阅。看起来像无限循环,因为在您的代码段中,您从未将行分配给null,缺少:line=sr.ReadLine();这个答案和上面的答案有什么区别?您必须在15分钟后添加新答案,即使问题已经解决。也没有什么改进…唯一的区别是我之前回答的和OP使用的是我的解决方案,但被接受的答案更详细哦,是的,我刚刚意识到你首先回答了。很抱歉。请不要在你未来的答案中仅仅张贴代码。否则,您的答案可能会被否决+1。看起来像是无限循环,因为在您的代码段中,您从未将行指定为null,缺少:line=sr.ReadLine();这个答案和上面的答案有什么区别?您必须在15分钟后添加新答案,即使问题已经解决。也没有什么改进…唯一的区别是我之前回答的和OP使用的是我的解决方案,但被接受的答案更详细哦,是的,我刚刚意识到你首先回答了。很抱歉。请不要在你未来的答案中仅仅张贴代码。解释一下,否则你的答案可能会被否决+1。
  using (StreamReader sr = new StreamReader("Your file path")) 
     {
         //do your work
     }