FileInfo

同一のファイルに複数の処理をする場合には、FileよりFileInfoのメソッドを呼ぶようにすることで、パスに対するセキュリティ チェックを一度だけにできます。Remarks - FileInfo Class (System.IO) | Microsoft Learn

コンストラクタ

public FileInfo (string fileName);
FileInfo(String) コンストラクター (System.IO) | Microsoft Learn

コンストラクタではfileNameの存在やアクセス権は考慮されず、属性やサイズを取得しようとしたときに存在していないとFileNotFoundExceptionが投げられます。FileInfo - FileInfo

fileNamePathのメソッドで解釈されてから格納されるため、NameやFullNameから取得するとfileNameとは異なる値となっていることがあります。

FileInfo file1 = new FileInfo("c:\\dir\\sample.txt");
string n1a = file1.Name;     // "sample.txt"
string n1b = file1.FullName; // "c:\\dir\\sample.txt"

FileInfo file2 = new FileInfo("sample.txt");
string n2a = file2.Name;     // "sample.txt"
string n2b = file2.FullName; // "C:\\Projects\\test\\bin\\Debug\\sample.txt"

FileInfo file3 = new FileInfo("\\dir\\");
string n3a = file3.Name;     // ""
string n3b = file3.FullName; // "C:\\dir\\"

プロパティ

プロパティからの初回の読み取り時、FileInfoはファイルの情報をキャッシュします。以降はそのキャッシュが返されるため、プロパティの値に影響するような操作をしたならばRefresh()を明示的に呼び情報を更新します。Examples - FileInfo Class (System.IO) | Microsoft Learn

プロパティ 内容
string Name ファイルの名前。拡張子を含む
string FullName ファイルの絶対パス
string DirectoryName ディレクトリの絶対パス
string Extension ファイルの拡張子
bool Exists ファイルが存在するならば、true
bool IsReadOnly 読み取り専用ならば、true
long Length ファイルのサイズ。バイト単位
FileAttributes Attributes 属性
DateTime CreationTime 作成日時
DateTime LastWriteTime 更新日時
DateTime LastAccessTime アクセス日時
DirectoryInfo Directory 親ディレクトリ
     
プロパティ - FileInfo クラス (System.IO) | Microsoft Learn
FileInfo file = new FileInfo("c:\\dir\\sample.txt");

string str1 = file.Name;          // "sample.txt"
string str2 = file.FullName;      // "c:\\dir\\sample.txt"
string str3 = file.DirectoryName; // "c:\\dir"
string str4 = file.Extension;     // ".txt"

フィールド

フィールド  
string FullPath ファイルまたはディレクトリの絶対パス
string OriginalPath ユーザーから最初に指定された、相対または絶対パス

OriginalPath

ユーザーから最初に指定された (originally specified) パスとありますが、FileSystemInfo.OriginalPath Field (System.IO) | Microsoft Learn

インスタンスを生成した最初ではなく、Pathクラスで解釈される前の値が保持されています。

このフィールドはprotectedですが、派生クラス以外ではToString()で同様のパスを得られます。

FileInfo file = new FileInfo("\\1.txt");
FieldInfo field = typeof(FileInfo).GetField("OriginalPath", BindingFlags.NonPublic | BindingFlags.Instance);

string n1 = file.FullName;                // "C:\\1.txt"
string o1 = (string)field.GetValue(file); // "\\1.txt"
string t1 = file.ToString();              // "\\1.txt"

file.MoveTo("\\2.txt");
string n2 = file.FullName;                // "C:\\2.txt"
string o2 = (string)field.GetValue(file); // "\\2.txt" (変更されている)
string t2 = file.ToString();              // "\\2.txt"

メソッド

内部的な処理はFileと共通のため、処理内容や注意点は同じです。

メソッド 機能
Refresh() オブジェクトの状態を更新できる
MoveTo(String) ファイルを新しい場所へ移動できる
   

Refresh()

キャッシュされるのは_dataInitialisedフィールドを参照するプロパティで、

  • Exists
  • Length
  • CreationTimeUtc
  • LastWriteTimeUtc
  • LastAccessTimeUtc
  • Attributes

と、これらを呼び出すCreationTimeなどが該当します。よってRefresh()の呼び出しが必要なのは、これらのプロパティが変更されている場合のみです。

FileSystemInfo.Refresh メソッド (System.IO) | Microsoft Learn Refresh - filesysteminfo.cs

Create()

ファイルを作成できます。

public System.IO.FileStream Create ();
FileInfo.Create メソッド (System.IO) | Microsoft Learn

内部ではFile.Create()を呼ぶだけです。Create - fileinfo.cs

作成したファイルは戻り値のFileStreamを通して操作します。これを閉じるまでは、削除などの操作はできません。

FileInfo file = new FileInfo("a.txt");
file.Create();

file.Delete(); // IOException「別のプロセスで使用されているため、プロセスはファイル 'a.txt' にアクセスできません。」
FileInfo file = new FileInfo("a.txt");
FileStream fs = file.Create();
fs.Close();

file.Delete(); // OK

CopyTo()

ファイルをコピーできます。

public System.IO.FileInfo CopyTo (
    string destFileName,
    bool overwrite
    );
CopyTo(String, Boolean) - FileInfo.CopyTo メソッド (System.IO) | Microsoft Learn

CopyTo()でコピーしても、インスタンスのパスは変更されません

FileInfo file = new FileInfo("a.txt");
string name1 = file.Name; // a.txt

file.CopyTo("b.txt");
string name2 = file.Name; // a.txt (変更されていない)

MoveTo()

ファイルを移動できます。

public void MoveTo (string destFileName);
FileInfo.MoveTo メソッド (System.IO) | Microsoft Learn

MoveTo()で移動すると、インスタンスのパスも変更されます

FileInfo file = new FileInfo("a.txt");
string name1 = file.Name; // a.txt

file.MoveTo("b.txt");
string name2 = file.Name; // b.txt (変更されている)

移動先にファイルが存在すると、「既に存在するファイルを作成することはできません。」としてIOExceptionが投げられます。

Replace()

ファイルを置換できます。

public System.IO.FileInfo Replace (
    string destinationFileName,
    string destinationBackupFileName
    );
Replace(String, String) - FileInfo.Replace メソッド (System.IO) | Microsoft Learn

インスタンスが表すファイルのパスがdestinationFileNameに変更され、destinationFileNameのパスがdestinationBackupFileNameになります。

MoveTo()とは異なり、成功してもインスタンス自体のパスは変更されず、新しいパスのインスタンスが返されます。

内部では、File.Replace()を呼ぶだけです。Replace - fileinfo.cs

Microsoft Learnから検索