Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
File.Exists() / File.Delete() / File.Copy()
ファイルの存在を確認する『File.Exists()』、ファイルを削除する『File.Delete()』、ファイルをコピーする『File.Copy()』、ファイルを移動する『File.Move()』の使い方です。
構文
using System.IO; // ファイルが存在するか確認します(true / false を返します)。 bool 存在 = File.Exists(string path); // ファイルを削除します。存在しない場合は何もしません。 File.Delete(string path); // ファイルをコピーします。 File.Copy(string sourceFileName, string destFileName); // ファイルをコピーします(true で上書き許可)。 File.Copy(string sourceFileName, string destFileName, bool overwrite); // ファイルを移動します(リネームにも使えます)。 File.Move(string sourceFileName, string destFileName); // ファイルを移動します(true で上書き許可、.NET 5 以降)。 File.Move(string sourceFileName, string destFileName, bool overwrite);
メソッド一覧
| メソッド | 概要 |
|---|---|
| File.Exists(path) | 指定したパスのファイルが存在すれば true、存在しなければ false を返します。 |
| File.Delete(path) | 指定したファイルを削除します。ファイルが存在しない場合は例外をスローしません。 |
| File.Copy(src, dest) | src を dest にコピーします。dest が既に存在する場合は IOException をスローします。 |
| File.Copy(src, dest, overwrite) | overwrite を true にすると既存ファイルを上書きします。 |
| File.Move(src, dest) | ファイルを別の場所へ移動します。ファイル名を変えることでリネームにも使えます。 |
| File.GetLastWriteTime(path) | ファイルの最終更新日時を DateTime で返します。 |
サンプルコード
using System;
using System.IO;
string 元ファイル = "original.txt";
string コピー先 = "copy.txt";
string 移動先 = "moved.txt";
// テスト用ファイルを作成します。
File.WriteAllText(元ファイル, "テスト用のファイルです。");
// File.Exists() でファイルの存在を確認します。
Console.WriteLine(File.Exists(元ファイル)); // True
Console.WriteLine(File.Exists("none.txt")); // False
// File.Copy() でファイルをコピーします。
File.Copy(元ファイル, コピー先);
Console.WriteLine($"コピー完了: {File.Exists(コピー先)}"); // True
// 上書きコピーには overwrite: true が必要です。
File.Copy(元ファイル, コピー先, overwrite: true);
Console.WriteLine("上書きコピー完了");
// File.Move() でファイルを移動(またはリネーム)します。
File.Move(コピー先, 移動先);
Console.WriteLine($"移動前のコピー先: {File.Exists(コピー先)}"); // False
Console.WriteLine($"移動後の移動先: {File.Exists(移動先)}"); // True
// ファイルの最終更新日時を取得します。
DateTime 更新日時 = File.GetLastWriteTime(元ファイル);
Console.WriteLine($"最終更新: {更新日時:yyyy/MM/dd HH:mm:ss}");
// File.Delete() でファイルを削除します。
File.Delete(元ファイル);
File.Delete(移動先);
Console.WriteLine($"削除後: {File.Exists(元ファイル)}"); // False
概要
『File.Exists()』は競合状態(TOCTOU)の問題があります。「存在を確認 → 操作」の間に別プロセスがファイルを削除する可能性があるため、存在確認後も例外処理を組み合わせることを推奨します。
『File.Delete()』は存在しないファイルに対しては何もしませんが、ファイルが読み取り専用の場合は UnauthorizedAccessException がスローされます。ファイルの一括読み書きについてはFile.ReadAllText() / WriteAllText()を、行単位のストリーム処理についてはStreamReader / StreamWriterをご確認ください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。