こんにちは。たいら(@tairaengineer2)です。
この記事では、C#でファイルに上書きするやり方について解説します。
スポンサーリンク
前提条件
この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。
WriteAllTextメソッドについて
C#でファイルに上書きをするとき、WriteAllTextメソッドを使います。
このメソッドはusingは
using System.IO;
を使います。
WriteAllTextメソッドはオーバーロードされており
- 引数が2つ
- 引数が3つ
と、いう場合があります。
それぞれ解説していきます。
解説で使っているプロジェクトは、コンソールプロジェクトです。
コンソールプロジェクトを作成するやり方は下の記事をご参考ください。
プログラムを作成したあと、ビルドをするやり方はこちらの記事をご参考ください。
引数が2つのWriteAllTextメソッド
WriteAllText(String, String)
新しいファイルを作成し、指定した文字列をそのファイルに書き込んだ後、ファイルを閉じます。
既存のターゲット ファイルは上書きされます。
File.WriteAllText Method (System.IO) | Microsoft Docsから引用させて頂きました
使い方は
- 第1引数:目的のファイルまでのパスを指定
- 第2引数:ファイルに書き込む内容を指定
です。
相対パスを注意した方がよいと書いた理由は、後ほど書きます。
絶対パスと相対パスについては、こちらの記事をご参考ください。
例えば
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ファイルが出来る場所に置きます。
さきほど相対パスで書く場合、注意した方がよいと書いたのはこれが理由です。
ビルドして実行するときは、exeファイルを使います。
ソリューションプロジェクトとexeファイルがある場所は異なります。
なので相対パスで指定したファイルは、ソリューションプロジェクトがある場所ではなく、ビルドしてexeファイルが出来る場所に置く必要があります。
【Sample.txt】は、更新日時が【2019/04/09 8:05】。
中身を見ると
【上書きする前】と書かれています。
では、実行します。
無事、書き込みが終わったようです。
【Sample.txt】を確認します。
更新日時が【2019/04/09 8:42】と更新されています。
中身を確認します。
実行する前に書かれていた【上書きする前】が上書きされて、【Hello,World!】が書かれています。
スポンサーリンク
引数が3つのWriteAllTextメソッド
WriteAllText(String, String, Encoding)
新しいファイルを作成し、指定したエンコーディングで指定の文字列をそのファイルに書き込んだ後、ファイルを閉じます。
既存のターゲット ファイルは上書きされます。
File.WriteAllText Method (System.IO) | Microsoft Docsから引用させて頂きました
使い方は
- 第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つのときと同じです。
絶対パスと相対パスについては、こちらの記事をご参考ください。
例えば
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("書き込みが完了しました。");
}
}
}
実行結果
では、実行しますが、その前に
- 書き込む予定のファイルがどこにあるのか
- 上書きされているか、確認するためファイルの中身
を確認します。
今回は書き込むファイルを絶対パスで指定しています。
そして
指定する【work】ディレクトリには、何もない状態で実行します。
無事、書き込みが終わったようです。
【work】ディレクトリを確認します。
【Sample.txt】が作成されています。
中身を確認します。
【Hello,World!】が書かれており、かつ文字コードが【UTF8】で書かれています。
スポンサーリンク
まとめ:ファイルに書き込みをしてみよう!
以上がファイルに上書きをするWriteAllTextメソッドの解説です。
まとめなので、もう1度WriteAllTextメソッドの使い方を振り返ります。
- 引数が2つのWriteAllTextメソッド
- 引数が3つのWriteAllTextメソッド
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
ほかにもC#勉強記事を書いてます。
よければご参考ください。
【C#】はてな2つの演算子、null合体演算子について解説します
【C#】整数を2進数、8進数、16進数に変換するやり方を解説します
【C#】ある文字を指定した回数だけ連続する文字列を作成するやり方を解説します
今までブログで書いたC#の解説記事のまとめは、こちらをご参考ください。