C# の TextReader は、テキスト ファイルからテキストまたは一連の文字を読み取るために使用されます。 TextReader クラスは System.IO 名前空間の下にあります。これは、それぞれストリームと文字列から文字を読み取るために使用される StreamReader と StringReader の抽象基本クラスです。 TextReader は抽象クラスなのでオブジェクトを作成できません。 TextReader は、デフォルトではスレッドセーフではありません。 TextReader クラスを派生するクラスは、TextReader の有用なインスタンスを作成するために、最小限の Peek() メソッドと Read() メソッドを実装する必要があります。
構文:
TextReader を作成する構文は次のとおりです。
TextReader text_reader = File.OpenText(file_path);
上記のステートメントは、「file_path」で指定された場所にあるファイルを開きます。次に、text_reader の助けを借りて、TextReader クラスのメソッドを使用してファイルからコンテンツを読み取ることができます。
以下に示すように、「using」ブロックを使用して TextReader を作成することもできます。
using(TextReader text_reader = File.OpenText(file_path)) { //user code }
「using」ブロックを使用する利点は、オブジェクトの作業が完了し、オブジェクトが必要なくなった後に、ブロック内で指定されたオブジェクトによって獲得されたメモリが解放されることです。
TextReader を使用するには、コードに System.IO 名前空間をインポートする必要があります。 TextReader は抽象クラスであるため、「new」キーワードを使用してそのインスタンスを直接作成することはできませんが、以下に示すように、File クラスの OpenText() メソッドを使用して同じことを実現できます。
TextReader text_reader = File.OpenText(file_path);
OpenText() メソッドは、ファイルの場所を入力として受け取り、同じ場所にある既存の UTF-8 でエンコードされたテキスト ファイルを読み取り用に開きます。
File.OpenText() メソッドは、TextReader の派生クラスである StreamReader クラスのオブジェクトを返すため、コード内で TextReader クラスの有用なインスタンスを作成するのに役立ちます。このインスタンスを使用して TextReader クラスのメソッドを呼び出し、ファイルからコンテンツを読み取ることができます。 TextReader クラスは、抽象クラス MarshalByRefObject から派生します。その継承階層を以下に示します。
オブジェクト → MarshalByRefObject → TextReader
TextReader は、StreamReader と StringReader という 2 つの派生クラスを利用して操作できます。
次の表で TextReader の重要なメソッドをいくつか見つけてください:
Method | Description |
Close() | It is used to close the TextReader and to release any system resources associated with it. |
Dispose() | It is used to release all the resources used by an object of TextReader. |
Peek() | It is used to read the next character without changing the state of the reader and it returns the next available character without actually reading it from the reader. |
Read() | It is used to read the next character from the text reader and it also advances the character position by one character. |
ReadLine() | It is used to read a line of characters from the text reader and it also returns the data as a string. |
ReadToEnd() | It is used to read all characters from the current position to the end of the text reader and it returns them as one string. |
We can pass a text file name in a TextReader constructor to create an object. Following are the different examples of TextReader in C#.
Reading a line of a file using the ReadLine() method of TextReader.
Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp3 { public class Program { public static void Main() { string file = @"E:\Content\TextReader.txt"; try { if (File.Exists(file)) { // opening the text file and reading a line using (TextReader textReader = File.OpenText(file)) { Console.WriteLine(textReader.ReadLine()); } } else { Console.WriteLine("File does not exist!"); } Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
Output:
Reading five characters from a file using the ReadBlock() method of TextReader.
Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp3 { public class Program { public static void Main() { string file = @"E:\Content\TextReader.txt"; try { if (File.Exists(file)) { //Opening the text file and reading 5 characters using (TextReader textReader = File.OpenText(file)) { char[] ch = new char[5]; textReader.ReadBlock(ch, 0, 5); Console.WriteLine(ch); } } else { Console.WriteLine("File does not exist!"); } Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
Output:
Reading the whole content of a text file using the ReadToEnd() method of TextReader.
Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp3 { public class Program { public static void Main() { string file = @"E:\Content\TextReader.txt"; string content = String.Empty; try { if (File.Exists(file)) { //Opening a text file and reading the whole content using (TextReader tr = File.OpenText(file)) { content = tr.ReadToEnd(); Console.WriteLine(content); } } else { Console.WriteLine("File does not exist!"); } Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
Output:
Reading the content of a text file using TextReader and writing it to another file.
Code:
using System; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp3 { public class Program { public static void Main() { string fileToRead = @"E:\Content\TextReader.txt"; string fileToWrite = @"E:\Content\TextReaderAndWriter.txt"; StringBuilder content = new StringBuilder(); string str = String.Empty; try { //checking if the file exists to read if (File.Exists(fileToRead)) { //Opening a text file and reading the whole content using (TextReader textReader = File.OpenText(fileToRead)) { while ((str = textReader.ReadLine()) != null) { content.Append("\n" + str); } } } else { Console.WriteLine("File does not exist!"); } //checking if the file to write content already exists if (File.Exists(fileToWrite)) { File.Delete(fileToWrite); } //creating file if it does not exist using (TextWriter textWriter = File.CreateText(fileToWrite)) { textWriter.WriteLine(content); } Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
Output:
以上がC# の TextReaderの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。