2016-12-01 22 views
0

だから私は私のプログラムは、テキストファイルから読み込み、そのように、コマンドプロンプト内のそのテキストファイル上にあるものを表示していしようとしている...C#未処理の例外:クローズしたTextReaderから読み込むことができません。

enter image description here

しかし、その後、プログラムはファイルの一行だけを読んで、その後、私は彼らが文句を言う私の3は.csファイルのライン上で起こって試してみた。このエラー例外 enter image description here

をスローすることができます。私はデバッグとコードの編集を試みましたが、それを行うほど悪くなるので、私は非常に紛失し混乱しています。私は正直なところ、この時点で何を修正すべきか分かりません。

これらは、彼らが文句を言うコード行で、その真下が実際のコードファイルです。

FileReader.csの42行--->
return streamReader.ReadLine();

FileReader.cs:MorgReader.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 
} 

ライン48 --->
一方((ボックス= Wrapped.Read())== NULL)

MorgReader .csファイル:Program.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 
} 

ライン33 --->
しばらく(!(NewMorg = MyReader.ReadMorg())= null)の

のProgram.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#をやって、私はこれに非常に新しいです。私はあなたの壮大な助けに感謝します。

答えて

2

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 

} 
+1

はい!どうもありがとうございます! – miiworld2

関連する問題