gpt4 book ai didi

C# 未处理的异常 : Cannot Read from a Closed Textreader

转载 作者:行者123 更新时间:2023-12-02 10:51:22 30 4
gpt4 key购买 nike

所以我试图让我的程序从文本文件中读取并在命令提示符内显示该文本文件上的内容,就像这样......

enter image description here

但是随后程序只能读取文件的一行,然后抛出这个错误异常
enter image description here

我已经尝试过他们提示的三个 .cs 文件的行。我尝试调试和编辑我的代码,但我做的越多,它变得越糟糕,所以我非常迷茫和困惑,老实说,我现在不知道要修复什么。

这些是他们提示的代码行,而它们的正下方是实际的代码文件。

FileReader.cs 第 42 行 --->
返回 streamReader.ReadLine();

文件阅读器.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace homework2
{
#region File Reader Class
// ___________________//
// FILE READER //
//____________________//
class FileReader : Reader
{
private StreamReader streamReader;

#region File Reader File Accessing Method
// Accessing the file
public FileReader(string fileName)
{
streamReader = System.IO.File.OpenText(fileName);
if (streamReader == null)
throw new Exception("OpenRead() failed for file " + fileName);
}
#endregion

#region Read Method
// Read Method
public override string Read()
{
// get and return a single line of text
return streamReader.ReadLine();
}
#endregion

#region Close Method
// Close Method
public override void Close()
{
streamReader.Close();
}
#endregion
}
#endregion
}

MorgReader.cs 第 48 行 --->
而 ((Box = Wrapped.Read()) == null)

MorgReader.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using homework2;

namespace homework2
{
#region Morg Reader Class
//___________________//
// MORG READER //
//___________________//
class MorgReader : ReaderDecorator
{
MorgFactory Fact;

public MorgReader(MorgFactory fact, Reader wrapped) : base(wrapped)
{
Fact = fact;
}

public override string Read()
{
return Wrapped.Read();
}

public override void Close()
{
Wrapped.Close();
}

public Morg ReadMorg()
{
#region splitting the text string
// A way to organize the block of text
string Box = " ";
while ((Box = Wrapped.Read()) == null)
return null;
string[] Part = Box.Split(',');
#endregion


#region Displaying each line of text from Morg Reader File to Morg factory
// Translate the info from Morg file to Morg factory to the program
Morg FactMorg = Fact.CreateMorg();
FactMorg.setName(Part[0]);

#region Converting location string to its variable
// A way to convert the string location to the current variable for location
Location FactLoc;
FactLoc = new Location();
FactLoc.X = Convert.ToInt32(Part[1]);
FactLoc.Y = Convert.ToInt32(Part[2]);
#endregion

/* FactMorg.Move(FactLoc.X, FactLoc.Y); */
FactMorg.setLocation(FactLoc);
FactMorg.setMovement(Part[3]);
FactMorg.setFeeding(Part[4]);

#endregion

return FactMorg;
}
}
#endregion
}

Program.cs 的第 33 行 --->
而 ((NewMorg = MyReader.ReadMorg()) != null)

程序.cs:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace homework2
{
#region Main Program
class Program
{
static void Main(string[] args)
// ____________________ //
// MAIN PROGRAM //
//______________________//
{

MorgReader MyReader = (new MorgReader(new MyMorgFactory(),new FileReader("morgs.txt")));

Morg NewMorg = new Morg("");

while ((NewMorg = MyReader.ReadMorg()) != null)
{

string NewMorgName = NewMorg.getName();
Location NewMorgXY = NewMorg.getLocation();
string NewMorgMovement = NewMorg.getMovement();
string NewMorgFeeding = NewMorg.getFeeding();

Console.WriteLine(NewMorgName + " " + NewMorgXY.X + " " + NewMorgXY.Y + " " + NewMorgMovement + " " + NewMorgFeeding);

MyReader.Close();

}

//MorgTypeA Morg1 = new MorgTypeA("Axel, the Axe-shaped Morg");
//MorgTypeB Morg2 = new MorgTypeB("Bael, the Dark Morg");
//MorgTypeC Morg3 = new MorgTypeC("Corona, the Light Morg");

//Simulator morgGame = new Simulator(Morg1, Morg2, Morg3);

//morgGame.run();
}
}
#endregion
}

这是我第一次做 C#,我对此很陌生。感谢您的大力帮助。

最佳答案

您将在 while 循环的第一次迭代中关闭您的阅读器。

public static void Main(string[] args)      
{
//some stuff

while ((NewMorg = MyReader.ReadMorg()) != null)
{

string NewMorgName = NewMorg.getName();
Location NewMorgXY = NewMorg.getLocation();
string NewMorgMovement = NewMorg.getMovement();
string NewMorgFeeding = NewMorg.getFeeding();

Console.WriteLine(NewMorgName + " " + NewMorgXY.X + " " + NewMorgXY.Y + " " + NewMorgMovement + " " + NewMorgFeeding);

//MyReader.Close(); -> this line put it out from the while loop

}

//put it here
MyReader.Close();

//other stuff

}

关于C# 未处理的异常 : Cannot Read from a Closed Textreader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908469/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com