Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ StreamReaderを使用したファイルの読み取り | データ構造とファイル操作
C#オブジェクト指向構造

bookStreamReaderを使用したファイルの読み取り

メニューを表示するにはスワイプしてください

C#プログラミング言語を使用してファイルを開き、読み取ることができます。

ファイルを読み取るには、新しいStreamReaderオブジェクトを作成します。StreamReaderオブジェクトはファイルのパスを受け取ります。

Note
ノート

「オブジェクト」という用語は後のセクションでより明確になりますが、理解のために説明すると、オブジェクトとはデータ型のインスタンスのことです。StreamReaderintfloatと同様にデータ型です。そのため、値12.5f"Hello World"は、それぞれint型、float型、string型の「オブジェクト」として技術的に呼ぶことができます。

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

ここで fileVarName は StreamReader オブジェクトを格納する変数名を表し、fullPath はファイルのフルパスを文字列として指定します。

例えば、デスクトップ上の "text.txt" ファイル(パスは C:/Users/Admin/Desktop/text.txt)を開く場合:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
ノート

暗黙的な宣言を使用して、構文を少し短くすることも可能です: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

text.txt ファイルには次の内容が含まれていると仮定する:

text.txt

text.txt

copy
12345
This is some example text

StreamReader オブジェクトには、ファイルから1行を読み取り返す ReadLine メソッドがある:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

出力:

This

ReadLine メソッドは自動的にカーソルを次の行に移動するため、再度呼び出すと次の行があればそれを読み取り、なければ単に null(何もない)を返します。

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

出力:

This
is
some
example
text

ファイルからすべての行を読み込むには、次の行が while かどうかを条件として null ループを使用できます。以下はその簡単な方法です。

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

出力:

This
is
some
example
text

上記のコードは、ちょっとした工夫でさらに簡潔にできます。そのために、代入文について見てみましょう。代入文には戻り値もあり、それは代入される値です。例を使って説明します。

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

出力:

7

7 という文が a = 7 を返し、それが 7 に代入される値であるため、a が出力されます。

この仕組みを利用して、1つの文で複数の変数に同じ値を代入することも可能です。

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

出力:

9
9
9

この情報を活用し、不要なコードを削除してファイル読み込みコードをより簡潔にすることが可能。

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

条件内では、まず代入文 line = textFile.ReadLine() を使用して line 変数を自動的に更新し、その後、文の戻り値から null かどうかを確認します。

ファイルを読み込んだ後は、Close メソッドを使って必ずファイルを閉じる必要があります。そうしないと、メモリリークが発生したり、プログラムが実行されている間ファイルがロックされて他の場所からアクセスできなくなる可能性があります。

最終的なコードは次のようになります。

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

クリックまたはドラッグ`n`ドロップして空欄を埋めてください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  6

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  6
some-alt