C#

【C# 入門】超簡単!ファイル入出力

こんにちは、リバティエンジニア[?]のたくやです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。

C#では簡単にファイルの読み込みや書き込みをする事ができる様々な関数が用意されています。
今回はその中でも【System.IO】クラスをご紹介します。

C# ファイル出力

まずはファイルの出力から見ていきましょう。
出力の方法として2つご紹介します。

  • ファイルを毎回上書きして出力する方法
  • すでに記載されている内容を残して追記する方法

ファイルに上書きして出力

ファイルを新規作成もしくは上書きして、文字列をファイルに出力するには、"File.WriteAllText"メソッドを使用します。

ファイルを上書きしてしまうので、複数回実行しても以前に出力された結果は消えてしまいますので注意してください。

using System;
using System.IO;

namespace TestFileIO
{
    class Program
    {
        static void Main(string[] args)
        {
            // 第1引数:ファイルパス
            // 第2引数:追記するテキスト
            File.WriteAllText(@"C:Myfoldertest.txt", "Hello World!");
        }
    }
}

実質たった1行だけでファイルへの出力ができてしまいます。
簡単ですよね。

では次に上書きではなく、追記する方法を見ていきましょう。

ファイルに追記して出力

すでに存在しているファイルに追記するには、"AppendAllText"メソッドを使用します。

ファイルが存在していない場合でも、ファイルは新しく作成されます。
例外は発生しませんので安心してください。
では早速サンプルコードを見てください。
using System;
using System.IO;

namespace TestFileIO
{
    class Program
    {
        static void Main(string[] args)
        {
            // 第1引数:ファイルパス
            // 第2引数:追記するテキスト
            File.AppendAllText(@"C:Myfoldertest.txt", "Hello World!");
        }
    }
}

これでOKです。

ですがこれだと複数回実行するとファイルの中身は、

「Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!」
このように連続して追記されてしまいます。
見にくいですよね。。

そんなときには自分で改行を入れてみましょう。

"Environment.NewLine"を使うと改行コードを入れてくれます。
実際に使ったコードも見てください。

using System;
using System.IO;

namespace TestFileIO
{
    class Program
    {
        static void Main(string[] args)
        {
            // 第1引数:ファイルパス
            // 第2引数:追記するテキスト
            File.AppendAllText(@"C:Myfoldertest.txt", "Hello World!"+Environment.NewLine);
        }
    }
}

先程のコードとの違いは、"Hello World!"のあとに「++Environment.NewLine」を追加したことです。
こうすることで、実行結果は以下のようになります。

Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

見やすくなりましたね。

これでファイル出力はできるようになったので、次に入力してみましょう。

C# ファイル入力

出力したテキストファイルから、文字列を読み込むには、File.ReadAllTextメソッドを使用しましょう。

using System;
using System.IO;

namespace TestFileIO
{
    class Program
    {
        static void Main(string[] args)
        {
            // 第1引数:ファイルパス
            string readText = File.ReadAllText(@"C:Myfoldertest.txt");
            Console.WriteLine(readText);
        }
    }
}

こうすることで、"C:Myfoldertest.txt"のテキストがstring型のreadText変数内に格納されています。

上記のサンプルコードでは、テキストファイルのテキストを取得後"Console.WriteLine"でコンソールに出力しています。
確認したいときはステップ実行するかこのコンソール出力画面を確認してみてくださいね。

【おまけ】ファイルが存在しているかの確認

もしファイルパスに存在しないパスが指定されると、'System.IO.DirectoryNotFoundException'例外が発生してしまいます。

そうならないように対策としてファイルパスを検証する方法があります。
便利な機能があるので、是非活用してみましょう。

using System;
using System.IO;

namespace TestFileIO
{
    class Program
    {
        static void Main(string[] args)
        {
            // ファイルパス
            string path = @"C:Myfoldertest.txt"
            // ファイルの存在チェック
            if (File.Exists(path))
            {
                // ファイルが存在するので正常系の処理
                string readText = File.ReadAllText(path);
                Console.WriteLine(readText);
            }
            else
            {
                // ファイルは存在しない
                Console.WriteLine("※ ファイルは存在しません!");
            }
        }
    }
}

このようにチェックすることでプログラムが途中で例外を起こして、止まることはありません。

[C#] 条件によって処理を変えてみる(if, else)


Copyright© FUNA BLOG , 2020 All Rights Reserved.