Home > C# > C# 学び直し > ファイル IO

テキストファイルを読み込んで表示する

新規作成日 2017-07-10
最終更新日 6

テキストファイルを読み込んで、コンソールに表示します。この基本的な操作で、ストリームの使い方の基本を理解しましょう。

C#では、よく使う機能のほとんどは、クラスやインターフェイスとして提供されています。そのため、適切に使用すれば、素早く簡単に機能を実装することできます。

しかし、問題があります。取扱説明書に相当するドキュメントが用意されていない、存在していても読んでも理解できないことが頻繁にあります。 もちろん、C#に精通されている方が読めば簡単に理解できると思われます。ただ、C#をあまり使い込んでいない場合には、それだけの情報では利用できません。

使い方を理解できる説明で紹介している書籍やインターネット上の文章に出会う必要があります。

.Net Frameworkのストリームを理解する

既に所有しているC#の入門書を見直して、ファイル入出力の項目を確認しましょう。また、インターネット上で紹介されているC#でのファイル入出力の記事を確認しても良いかと思います。

C#でのファイル入出力は、.Net Frameworkのストリームを使用します。ストリームは、C#のI/O(Input/Output:入出力)の基盤です。詳細を理解するには、クラス、継承、例外などの概念を理解する必要があります。しかし、基本的な機能を使うだけであれば、コードの定形表現として理解してしまえば問題ありません。基本的な機能で問題が解決できないようなら、より深い概念を理解する必要があります。

ストリームは、データの保存や読み込みを行う主にストレージを指す媒体を抽象化した概念です。ファイル、メモリ、ネットワーク、バッファとデータをやり取りする際、このストリームという概念で同じように操作できる仕組みです。ストリーム関連のクラスは、System.IO名前空間で定義されています。

ファイルの読み込みは、StreamReaderとFileReaderのそれぞれで実現できます。基本的な使用例は、ネット上で閲覧できるMSDNで確認できます。

StreamReaderでファイルを読み込む

StreamReader クラスを使用してファイルを読み込む場合、実質はFileReaderクラスが呼び出され、StreamReader クラスを経由して、FileReaderクラスをラップして使用しています。 Windows8スタイルの.NETでは、FileReaderやFileWiterが定義されていないので、FileReaderやFileWiterをあえて使う必要がなければ、StreamReader やStreamWiterを使ったほうが良さそうです。

StreamReaderでファイルを一行づつ読み込む

msdnでのStreamReaderクラスの説明

一般にテキストファイルは、ファイル内のテキストを1行づつ読み込み、その内容を処理する方法が取られます。そうすることで、大きなファイルでもメモリを圧迫せずに実行できます。

ファイルの終端の判別方法に様々な方法があります。

  1. msdnで紹介されている使用例を使って、テキストファイルを一行づつ読み込みコンソールに表示する

    StreamReaderの返り値は、読み込んだ文字列の文字数が返されます。それを利用して、文字が存在するかどうか、つまり、nullでないかを判別し、ファイルの終端を判別します。

  2. C#のStreamReaderを使って、Peek()メソッドで、終端を検出し、テキストファイルを1行ごとに読み込む

    ファイルの終端の判断は、使用可能な次の文字を返すPeekメソッドを使用して行っています。

    また、コンソールに出力する文字に、色を付ける方法についても説明しています。

StreamReaderでファイルを一度に読み込む

読み込むファイルのファイルサイズが小さい場合は、ファイルを一度に読み込んだほうが処理が楽になります。

  1. StreamReaderを使用して、一度にファイルを読み込んで表示する
  2. msdnのStreamReaderクラスの非同期読み込みの使用例を使用して、ファイルを一度に読み込む

参考にしたサイト

自分が理解できる説明がかかれているサイトは貴重です。そういったサイトは、URLなど所在が後から確認できる様にしておくことをお勧めします。

このページの内容は、以下のサイトを参考にして作成しました。

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」