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

msdnのStreamReaderクラスの非同期読み込みの使用例を使用して、ファイルを一度に読み込む

新規作成日 2017-10-16
最終更新日

具体的には、どのように動作しているかは理解できませんが、ReadAsync メソッドを使うことで、非同期読み込みを使用することができます。 コードは、少し増えます。C#でWPFアプリケーションを作成する際は、 読み込み動作の間にUIが停止することが無くなるので、特に問題がなければ、非同期読み込みコードを使用したほうが良いかと思います。

StreamReaderAsyncTestという名前でコンソールアプリケーションを作成します。

改めて、StreamReaderAsyncTestという名前でコンソールアプリケーションを作成します。

今回も、msdnのStreamReader クラスの使用例を使います。

StreamReaderクラス

Program.csにコードを貼り付けます。

そして、ファイル名を読み込むファイルのものに変更しておきます。また、実行結果を確認できるように、コンソールを閉じないように、キー入力を求めるコードを追加します。

using System;
using System.IO;
using System.Threading.Tasks;

namespace StreamReaderAsyncTest
{
    class Program
    {
        static void Main(string[] args)
        {
            ReadAndDisplayFilesAsync();
            // Enterキーが押されるまで、コンソールを閉じないようにする
            Console.Read();
        }

        private async static void ReadAndDisplayFilesAsync()
        {
            String filename = @"TextFile.txt";
            Char[] buffer;

            using (var sr = new StreamReader(filename))
            {
                buffer = new Char[(int)sr.BaseStream.Length];
                await sr.ReadAsync(buffer, 0, (int)sr.BaseStream.Length);
            }

            Console.WriteLine(new String(buffer));
        }
    }
}
次に、ソリューションエクスプローラーで、新しい項目を追加します。

次に、ソリューションエクスプローラーで、新しい項目を追加します。

テキストファイルを追加します。

テキストファイルを追加します。

作成したテキストファイルに次の内容を記入し、保存します。

テキストエディタで作成する場合は、保存場所と文字エンコードに注意して下さい。

// 英語,複数形,性別,日本語,数詞
dog,dogs,male,犬,匹
bitch,bitchs,female,犬,匹
cat,cats,non,猫,匹
rabbit,rabbits,non,兎,羽
一度、実行ボタンを押してビルドし、作成したテキストファイルをプロジェクトフォルダー内のbin→Dibugフォルダにコピーします。

一度、実行ボタンを押してビルドし、作成したテキストファイルをプロジェクトフォルダー内のbin→Dibugフォルダにコピーします。

実行ボタンを押します。

実行ボタンを押します。

テキストがコンソールに表示されます

テキストがコンソールに表示されます

動作することが確認できました。再利用しやすいように、読み込むファイルが存在するかの確認や例外処理のコードを追加します。

using System;
using System.IO;
using System.Threading.Tasks;

namespace StreamReaderAsyncTest
{
    class Program
    {
        static void Main(string[] args)
        {
            ReadAndDisplayFilesAsync();
            // Enterキーが押されるまで、コンソールを閉じないようにする
            Console.Read();
        }

        private async static void ReadAndDisplayFilesAsync()
        {
            try
            {
                String filename = @"TextFile.txt";
                Char[] buffer;

                if (File.Exists(filename))
                {
                    using (var sr = new StreamReader(filename))
                    {
                        buffer = new Char[(int)sr.BaseStream.Length];
                        await sr.ReadAsync(buffer, 0, (int)sr.BaseStream.Length);
                    }
                    Console.WriteLine(new String(buffer));
                }
                else
                {
                    Console.WriteLine("ファイル「{0}」が存在しません。", filename);
                }
            }
            catch (Exception e)
            {
                // Let the user know what went wrong.
                // ユーザーに、何が問題になったのかを知らせます。
                // The file could not be read:
                Console.WriteLine("ファイルを読み取れませんでした:");
                Console.WriteLine(e.Message);
            }
        }

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

Home PC C# Illustration

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