【C#入門】ファイルの使い方総まとめ(読み書き/存在チェックなど)

こんにちは!エンジニアの中沢です。

C#にはファイルを操作するための様々なメソッドが用意されています。

ファイルの読み書きや、存在チェック、コピーなどの様々なことができます。

この記事では、

・ファイルの操作とは
・テキストファイルを読み込む方法
・ファイルにテキストを書き込む方法

という基本的な内容から、

・ファイルパスからファイル名を取得する方法
・ファイルとフォルダの存在チェックをする方法
・ファイルを削除する方法
・ファイルをコピーする方法
・ファイルを検索する方法
・ファイルサイズを取得する方法

などの応用的な使い方に関しても解説していきます。

今回はこれらの方法を覚えるために、ファイルのさまざまな使い方をわかりやすく解説します!

目次

ファイルの操作とは

C#では、ファイルを扱うためにいくつかのクラスが用意されています。

ファイルの読み書きするためのクラスには、ファイルを読み込むための「System.IO.StreamReader」や、ファイルに書き込むための「System.IO.StreamWriter」があります。

ファイルを操作するためのクラスには、「System.IO.File」があります。

ファイルの情報を扱うには、「System.IO.FileInfo」を使います。

この記事では、これらのファイルを扱うクラスの使い方をまとめて解説します。

サンプルプログラムに関しては、Cドライブ直下にSamuraiというフォルダをつくり、その中に以下のファイルがある想定で進めていきます。

  • samurai.txt
  • samurai.jpg
  • samurai.zip

テキストファイルを読み込む方法

1度にすべてのテキストファイルの内容を読み込むには、「StreamReaderクラス」の「ReadToEndメソッド」を使います。

StreamReaderクラスの使い方は、コンストラクタの第1引数に読み込むファイルのパスを指定して、第2引数に文字コードを指定します。

「ReadToEndメソッド」でファイルの読み込みが終わったら、「Closeメソッド」でファイルを閉じる必要があることも忘れないでください。

テキストファイルを読み込む方法を次のプログラムで確認してみましょう。

using System;
using System.IO;
using System.Text;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            StreamReader sr = new StreamReader(@"C:\Samurai\samurai.txt", Encoding.GetEncoding("Shift_JIS"));

            string str = sr.ReadToEnd();

            sr.Close();

            Console.WriteLine(str);

            Console.ReadKey();
        }
    }
}

実行結果:

//この表示は一例です。表示内容はテキストファイルの内容に依存します。
侍
エンジニア
塾

このようにして、テキストファイルの中身を表示することができました。

さらに詳しい使い方は次の記事で解説しているので、ぜひ確認してください。

ファイルにテキストを書き込む方法

ファイルにテキストを上書き保存するには、「StreamWriter」のコンストラクタの第2引数に「false」を指定します。

作成するファイルが存在しない場合には、新規にファイルが作成されます。

すでにファイルが存在する場合には、そのファイルは削除されて上書き保存されるので注意が必要です。

次のプログラムで確認してみましょう。

using System;
using System.IO;
using System.Text;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            // 文字コードを指定
            Encoding enc = Encoding.GetEncoding("Shift_JIS");

            // ファイルを開く
            StreamWriter writer = new StreamWriter(@"C:\Samurai\samurai.txt", false, enc);

            // テキストを書き込む
            writer.WriteLine("この内容を書き込みます");

            // ファイルを閉じる
            writer.Close();

            Console.WriteLine("ファイルに書き込みました");
            Console.ReadKey();
        }
    }
}

実行結果:

ファイルに書き込みました

このプログラムでは、初めに「Encoding.GetEncoding("Shift_JIS")」文字コードを指定しています。

次に「StreamWriter」でファイルを開いています。

「writer.WriteLine」でテキストを書き込み、「writer.Close」でファイルを閉じて処理を完了させています。

さらに詳しい使い方は次の記事で解説しているので、ぜひ確認してください。

ファイルパスからファイル名を取得する方法

ファイル名をパスから取得するには、「GetFileNameメソッド」を使います。

引数にファイルのパスを指定すると、戻り値としてファイル名が取得できます。

「GetFileNameメソッド」の使い方を次のプログラムで確認してみましょう。

using System;
using System.IO;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string filePath = Path.GetFileName(@"C:Samurai\samurai.txt");

            Console.WriteLine(filePath);
            Console.ReadKey();
        }
    }
}

実行結果:

samurai.txt

このプログラムでは、「GetFileNameメソッド」を使ってファイルのパスからファイル名だけを取得して表示しています。

さらに詳しい使い方は次の記事で解説しているので、ぜひ確認してください。

ファイルとフォルダの存在チェックをする方法

Existsメソッドでファイルの存在チェックをするには、引数にチェックしたいファイルのパスを指定します。

ファイルのパスの指定は、先頭に「@」をつけて行うのが便利です。

ファイルの存在チェックをする方法を次のプログラムで確認してみましょう。

using System;
using System.IO;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string filePath = @"C:\Samurai\samurai.txt";

            if (File.Exists(filePath))
            {
                Console.WriteLine("存在します");
            }
            else
            {
                Console.WriteLine("存在しません");
            }

            Console.ReadKey();
        }
    }
}

実行結果:

存在します

このプログラムでは、指定したパスにファイルが存在するため、Existsメソッドが”true”を返しています。

このようにしてファイルの存在を確認することができました!

さらに詳しい使い方は次の記事で解説しているので、ぜひ確認してください。

ファイルを削除する方法

FileクラスのDeleteメソッドは引数に削除したいファイルのパスを指定することで使用できます。

次のプログラムで確認してみましょう。

using System;
using System.IO;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            File.Delete(@"C:\Samurai\samurai.txt");

            Console.WriteLine("ファイルが削除されました");
            Console.ReadKey();
        }
    }
}

実行結果:

ファイルが削除されました

このようにしてファイルを削除することができました。

さらに詳しい使い方は次の記事で解説しているので、ぜひ確認してください。

ファイルをコピーする方法

FileクラスのCopyメソッドは第1引数にコピー元のファイルパスを指定して、第2引数にコピー先のパスを指定することで使用できます。

次のプログラムで確認してみましょう。

using System;
using System.IO;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            File.Copy(@"C:\Samurai\samurai.txt", @"C:\Samurai\samurai2.txt");

            Console.WriteLine("ファイルがコピーされました");
            Console.ReadKey();
        }
    }
}

実行結果:

ファイルがコピーされました

このようにしてファイルをコピーすることができました。

さらに詳しい使い方は次の記事で解説しているので、ぜひ確認してください。

ファイルを検索する方法

DirectoryクラスGetFilesメソッドで指定したフォルダ内を検索する方法を解説します。

GetFilesメソッドは第1引数にフォルダのパスを指定します。

第2引数に検索パターンを指定します。

第3引数にはサブフォルダも検索する場合には「SearchOption.AllDirectories」を指定します。
サブフォルダを検索しない場合には省略できます。

検索パターンにワイルドカードの"*"を指定することで、すべてのファイルのパスを戻り値として取得することができます。

GetFilesメソッドの使い方を次のプログラムで確認してみましょう。

using System;
using System.IO;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string[] files = Directory.GetFiles(@"C:\Samurai", "*");

            foreach (string str in files)
            {
                Console.WriteLine(str);
            }

            Console.ReadKey();
        }
    }
}

実行結果:

C:\Samurai\samurai.jpg
C:\Samurai\samurai.txt

このプログラムでは、指定したフォルダ内すべてのファイルのパスを取得して表示しています。

さらに詳しい使い方は次の記事で解説しているので、ぜひ確認してください。

ファイルサイズを取得する方法

ファイルサイズを取得するLengthプロパティの使い方を解説します。

Lengthプロパティを使うには、FileInfoクラスのコンストラクタの引数にファイルのパスを指定します。

次のプログラムで確認してみましょう。

using System;
using System.IO;

namespace Sample
{
    class Sample
    {
        static void Main()
        {
            FileInfo file = new FileInfo(@"C:\Samurai\samurai.zip");
            long size = file.Length;

            Console.WriteLine("ファイルサイズは、{0}バイトです。", size);

            Console.ReadKey();
        }
    }
}

実行結果:

ファイルサイズは、10750669バイトです。

このようにLengthプロパティを使ってファイルサイズを取得することができました。

さらに詳しい使い方は次の記事で解説しているので、ぜひ確認してください。

まとめ

いかがでしたか?

今回はファイルの様々な使い方をまとめて解説しました。

ファイルの読み書きやコピーなど、必要に応じて使い分けてくださいね。

もし、ファイルの使い方を忘れてしまったらこの記事を確認してください!

この記事を書いた人

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
ntakeshi@sejuku.net

目次