C#でファイルを作成する方法について紹介します。
ファイルを作成する際は、System.IO名前空間のFileInfoクラスのCreateメソッドを使用するか、FileクラスのCreate静的メソッドを使用します。
目次
FileInfoクラスのCreateメソッドで作成
FileInfoクラスのCreateメソッドの構文は次のようになります。
1 |
public System.IO.FileStream Create (); |
FileInfo.Createメソッドの使用例
以下にCreateメソッドの使用例を示します。
1 2 3 4 5 6 |
// ファイルパス string path = @"C:\Test\NewFile.txt"; // FileInfoのインスタンスを生成する FileInfo fileInfo = new FileInfo(path); // ファイルを作成する FileStream fileStream = fileInfo.Create(); |
Createメソッドは、作成したファイルのFileStreamオブジェクトを戻り値に返します。
CreateメソッドではFileInfoに設定したパスをもとにファイルを作成しますが、指定したパスのフォルダー(ディレクトリ)がない場合は「System.IO.DirectoryNotFoundException: ‘パス ‘C:\Test\NewFile.txt’ の一部が見つかりませんでした。’」という例外が発生します。(「C:\Test\NewFile.txt」の部分は指定したファイルのパスになります。)
Createメソッドでファイルを作成する場合は、事前にファイルを作成するフォルダーが存在するかどうかを確認した上で、存在しないのであればフォルダーを作成する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 |
// ファイルパス string path = @"C:\Test\NewFile.txt"; // FileInfoのインスタンスを生成する FileInfo fileInfo = new FileInfo(path); // フォルダーが存在するかどうかを確認 if (!fileInfo.Directory.Exists) { // フォルダーが存在しない場合は作成 fileInfo.Directory.Create(); } // ファイルを作成する FileStream fileStream = fileInfo.Create(); |
FileクラスのCreate静的メソッドで作成
FileクラスのCreate静的メソッドの構文は次のようになります。
1 |
public static System.IO.FileStream Create (string path); |
引数のpathに作成するファイルのパスを指定します。Create静的メソッドもFileInfoクラスのCreateメソッドと同様に、作成したファイルのFileStreamオブジェクトを戻り値に返します。
File.Create静的メソッドの使用例
以下にCreate静的メソッドの使用例を示します。
1 2 |
// ファイルを作成する FileStream fileStream = File.Create(@"C:\Test\NewFile.txt"); |
FileクラスのCreate静的メソッドは、FileInfoクラスのCreateメソッドと同様の処理を行うことができます。
FileInfoクラスのCreateメソッド、CreateSubdirectoryメソッド、FileクラスのCreate静的メソッドとも、作成対象のファイルが既に存在していてもファイルが新たに作成されます。既存のファイルを新しいファイルで上書きしないようには、ファイルが存在するかどうかを確認し、ファイルが存在する場合は警告メッセージ等を表示する処理が必要になります。
1 2 3 4 5 6 7 8 9 10 11 |
// ファイルパス string path = @"C:\Test\NewFile.txt"; // ファイルを作成する if (File.Exists(path)) { MessageBox.Show($"{path}は既に存在しています。"); } else { FileStream fileStream = File.Create(path); } |
サンプルプログラム
Windowsフォームアプリケーションでのプログラムの実装例を記載します。
ユーザーインターフェース
フォームのインターフェースは次のようにします。
「button1」ボタンをクリックするとテキストボックスに入力されたファイルを作成します。
ファイルが既に存在している場合は例外を発生させて処理を中止します。
ファイルのフォルダーが存在しない場合は作成してからファイルを作成します。
ソースコード
サンプルプログラムのフォームには次のようなソースコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
using System; using System.Text; using System.Windows.Forms; // System.IOのusingを追加 using System.IO; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // ファイルを作成する private void button1_Click(object sender, EventArgs e) { try { string filePath = textBox1.Text; // FileInfoオブジェクトのインスタンスを生成 FileInfo fileInfo = new FileInfo(filePath); // ファイルの存在確認 if (fileInfo.Exists) { // 既にファイルが存在しているのでエラー throw new ApplicationException("既にファイルが存在しています。"); } // フォルダーの存在確認 if (!fileInfo.Directory.Exists) { // 存在しない場合はフォルダーを作成 fileInfo.Directory.Create(); } // ファイルの作成 using (FileStream fileStream = fileInfo.Create()) { byte[] bytes = new UTF8Encoding(true).GetBytes("テキストが入力されたファイル。"); // ファイルへ書き込む fileStream.Write(bytes, 0, bytes.Length); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } |
サンプルの実行
作成したプログラムを実行します。
パスのテキストボックスに「C:\Test\CreateFile.txt」と入力します。
「button1」ボタンをクリックするとファイルが作成されます。
もう一度「button1」ボタンをクリックすると、既にファイルが存在しているために、例外が発生してエラーメッセージが表示されます。