エンジニアの将来って?

現在7年目のCOBOL→Java→C#エンジニアが、将来への考えや勉強のアウトプット、たまに腎臓について書くブログです

【C#】ファイルに上書きする、WriteAllTextメソッドを解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、C#ファイル上書きするやり方について解説します。

スポンサーリンク

 

前提条件

この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

WriteAllTextメソッドについて

C#でファイルに上書きをするとき、WriteAllTextメソッドを使います。
このメソッドはusingは

using System.IO;

を使います。
WriteAllTextメソッドオーバーロードされており

  • 引数が2つ
  • 引数が3つ

と、いう場合があります。
それぞれ解説していきます。

引数が2つのWriteAllTextメソッド

WriteAllText(String, String)
新しいファイルを作成し、指定した文字列をそのファイルに書き込んだ後、ファイルを閉じます。
既存のターゲット ファイルは上書きされます。

File.WriteAllText Method (System.IO) | Microsoft Docsから引用させて頂きました

使い方は

f:id:Tairax:20190408231858p:plain

  • 第1引数:目的のファイルまでのパスを指定
  • 第2引数:ファイルに書き込む内容を指定

です。
相対パスを注意した方がよいと書いた理由は、後ほど書きます。
絶対パスと相対パスについては、こちらの記事をご参考ください。

www.tairax.com

例えば

File.WriteAllText(@"C:/work/Sample.txt", "AAAAAA");

という風に使います。
パスの前に【@】がついていますが、これは逐語的文字列というものです。

C# のキーワードを識別子として使用できるようにする。
コード要素のプレフィックスとして @ 文字を使用すると、その要素はC# のキーワードではなく、識別子としてコンパイラに解釈されます。

@ - C# リファレンス | Microsoft Docsから引用させて頂きました

C#サンプルコード

引数が2つのWriteAllTextメソッドを実際に使ってみます。
解説に使うプログラムは、WriteAllTextメソッドを使ってファイルに書き出すというシンプルなものです。
ただし、第1引数で指定するパスは相対パスです。

using System;
using System.IO;

namespace ConsoleApp1
{
    /// <summary>
    /// 引数2つのWriteAllTextメソッドを使うプログラム
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            File.WriteAllText(@"./Sample.txt", "Hello,World!");
            Console.WriteLine("書き込みが完了しました。");
        }
    }
}

実行結果

では、実行しますが、その前に

  • 書き込む予定のファイルがどこにあるのか
  • 上書きされているか、確認するためファイルの中身

を確認します。
今回は書き込むファイルを相対パスで指定しています。
【./Sample.txt】の意味としては、実行ファイルと同じ場所に格納する必要があります。
結論から言うとファイルは、ビルドしてexeファイルが出来る場所に置きます。

f:id:Tairax:20190409081220p:plain

さきほど相対パスで書く場合、注意した方がよいと書いたのはこれが理由です。
ビルドして実行するときは、exeファイルを使います。
ソリューションプロジェクトとexeファイルがある場所は異なります。
なので相対パスで指定したファイルは、ソリューションプロジェクトがある場所ではなく、ビルドしてexeファイルが出来る場所に置く必要があります。

【Sample.txt】は、更新日時が【2019/04/09 8:05】。
中身を見ると

f:id:Tairax:20190409082954p:plain

【上書きする前】と書かれています。
では、実行します。

f:id:Tairax:20190409084312p:plain

無事、書き込みが終わったようです。
【Sample.txt】を確認します。

f:id:Tairax:20190409084538p:plain

更新日時が【2019/04/09 8:42】と更新されています。
中身を確認します。

f:id:Tairax:20190409084807p:plain

実行する前に書かれていた【上書きする前】が上書きされて、【Hello,World!】が書かれています。

 

スポンサーリンク

 

引数が3つのWriteAllTextメソッド

WriteAllText(String, String, Encoding)
新しいファイルを作成し、指定したエンコーディングで指定の文字列をそのファイルに書き込んだ後、ファイルを閉じます。
既存のターゲット ファイルは上書きされます。

File.WriteAllText Method (System.IO) | Microsoft Docsから引用させて頂きました

使い方は

f:id:Tairax:20190410223453p:plain

  • 第1引数:目的のファイルまでのパスを指定
  • 第2引数:ファイルに書き込む内容を指定
  • 第3引数:ファイルに描き込むエンコーディングを指定

引数が2つのときとほぼ同じです。
3つ目にエンコードを指定するだけです。
エンコーディングには、種類がたくさんあります。
よく使いそうなものは、以下です。

  • System.Text.Encoding.ASCII
  • System.Text.Encoding.Default
  • System.Text.Encoding.UTF32
  • System.Text.Encoding.UTF7
  • System.Text.Encoding.UTF8

これらを使うとき、usingは

using System.Text;

を使います。

相対パスを注意した方がよいと書いた理由も、引数が2つのときと同じです。
絶対パスと相対パスについては、こちらの記事をご参考ください。

www.tairax.com

例えば

File.WriteAllText(@"./Sample.txt", "BBBB",System.Text.Encoding.UTF8);

という風に使います。
パスの前に【@】がついていますが、これは逐語的文字列というものです。

C# のキーワードを識別子として使用できるようにする。
コード要素のプレフィックスとして @ 文字を使用すると、その要素はC# のキーワードではなく、識別子としてコンパイラに解釈されます。

@ - C# リファレンス | Microsoft Docsから引用させて頂きました

C#サンプルコード

引数が3つのWriteAllTextメソッドを実際に使ってみます。
解説に使うプログラムは、WriteAllTextメソッドを使ってファイルに書き出すというシンプルなものです。
ただし、第1引数で指定するパスは絶対パスです。

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

namespace ConsoleApp1
{
    /// <summary>
    /// 引数3つのWriteAllTextメソッドを使うプログラム
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            File.WriteAllText(@"C:\work\Sample.txt", "Hello,Wolrd!",Encoding.UTF8);
            Console.WriteLine("書き込みが完了しました。");
        }
    }
}

実行結果

では、実行しますが、その前に

  • 書き込む予定のファイルがどこにあるのか
  • 上書きされているか、確認するためファイルの中身

を確認します。
今回は書き込むファイルを絶対パスで指定しています。
そして

f:id:Tairax:20190410225130p:plain

指定する【work】ディレクトリには、何もない状態で実行します。

f:id:Tairax:20190410225441p:plain

無事、書き込みが終わったようです。
【work】ディレクトリを確認します。

f:id:Tairax:20190410225628p:plain

【Sample.txt】が作成されています。
中身を確認します。

f:id:Tairax:20190410225936p:plain

【Hello,World!】が書かれており、かつ文字コードが【UTF8】で書かれています。

まとめ:ファイルに書き込みをしてみよう!

以上がファイルに上書きをするWriteAllTextメソッドの解説です。
まとめなので、もう1度WriteAllTextメソッドの使い方を振り返ります。

  • 引数が2つのWriteAllTextメソッド

f:id:Tairax:20190408231858p:plain

  • 引数が3つのWriteAllTextメソッド

f:id:Tairax:20190410223453p:plain

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

 

ほかにもC#勉強記事を書いてます。
よければご参考ください。

【C#】はてな2つの演算子、null合体演算子について解説します

【C#】整数を2進数、8進数、16進数に変換するやり方を解説します

【C#】ある文字を指定した回数だけ連続する文字列を作成するやり方を解説します

 

今までブログで書いたC#の解説記事のまとめは、こちらをご参考ください。

【C#】ブログで書いた文法記事のまとめ