English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# FileInfo

 ここでは、FileInfoクラスを使用して物理ファイルに対して読み取りを行う方法を学びます。/書き操作。

FileInfoクラスはFileクラスと同じ機能を提供しますが、ファイルの読み取りや書き込みを行うためのバイト単位のコードを手動で書くことで、ファイルの読み取りや書き込みに対する制御を行うことができます。/書き込み操作にはより多くの制御権があります。

FileInfoの重要な属性とメソッド:

属性使用方法
Directory親ディレクトリのインスタンスを取得します。
DirectoryNameディレクトリの完全なパスを表す文字列を取得します。
Existsファイルが存在するかどうかを示す値を取得します。
Extensionファイルの拡張子を表す文字列を取得します。
FullNameディレクトリやファイルの完全なパスを取得します。
IsReadOnly現在のファイルが読み取り専用かどうかを取得または設定します。
LastAccessTime現在のファイルやディレクトリの最終アクセス時刻を取得または設定します。
LastWriteTime現在のファイルやディレクトリの最終書き込み時刻を取得または設定します。
Length現在のファイルのサイズ(バイト単位で)を取得します。
Nameファイルの名前を取得します。
メソッド使用方法
AppendTextStreamWriterを作成し、テキストをFileInfoのこのインスタンスが表すファイルに追加します。
CopyTo既存のファイルを新しいファイルにコピーし、既存のファイルをオーバーライドすることは許可されません。
Createファイルを作成します。
CreateText新しいテキストファイルに書き込むStreamWriterを作成します。
Decrypt現在のアカウントで暗号化されたファイルをEncryptメソッドで解密します。
Delete指定されたファイルを削除します。
Encryptファイルを暗号化し、暗号化されたファイルを解密できるアカウントのみがファイルを解密できます。
GetAccessControl指定されたファイルのアクセス制御リスト(ACL)エントリをエンキャップしたFileSecurityオブジェクトを取得します。
MoveTo指定されたファイルを新しい場所に移動し、指定された新しいファイル名のオプションを提供します。
Open指定されたFileModeで開きます。
OpenRead読み取り専用のFileStreamを作成します。
OpenTextUTFでエンコードされた8指定されたエンコードでStreamReaderを作成し、それが既存のテキストファイルから読み取ります。
OpenWrite書き込み専用のFileStreamを作成します。
Replace現在のFileInfoオブジェクトで指定されたファイルの内容を置き換え、元のファイルを削除し、置き換えファイルのバックアップを作成します。
ToString文字列形式でパスを返します。

以下の例では、ファイルからバイトを読み取ってUTF8エンコードを使用してそれらを文字列に変換します:

例:FileInfoクラスを使用してファイルを読み取る

//指定されたパス用のFileInfoオブジェクトを作成            
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//ファイルを読み取り・書き込み用に開きます
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
//FileStreamの長さと同じサイズのバイト配列を作成します
byte[] fileBytes = new byte[fs.Length];
//読み取る必要があるバイト数を確認するためのカウンタを定義します。各バイトを読み取るとカウンタを減らします
int numBytesToRead = (int)fileBytes.Length;
//カウンタは既に読み取ったバイト数を示します
int numBytesRead = 0;
//FileStreamからすべてのバイトを読み取るまで反復します
while (numBytesToRead > 0)
{
    int n = fs.Read(fileBytes, numBytesRead, numBytesToRead);
        
    if (n == 0)
        break;
    numBytesRead += n;
    numBytesToRead -= n;
}
//FileStreamからすべてのバイトを読み取った後、UTF8エンコードを文字列に変換します
string filestring = Encoding.UTF8.GetString(fileBytes);

上記のコードのように、FileStreamから読み取るために多くのコードを書く必要があります/文字列を書き込むことができますが、StreamReaderとStreamWriterを使用すると、同じ読み取り操作を簡単に実行できます/書き操作。

以下の例では、StreamReaderがファイルから文字列を読み取ることを簡単にする方法を示しています:

例:StreamReaderを使用してファイルを読み取る

//指定されたパス用のFileInfoオブジェクトを作成            
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
        
//ファイルを読み取り・書き込み用に開きます
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read); 
//操作を行う必要があるFileStreamオブジェクトを渡してStreamReaderオブジェクトを作成します
StreamReader sr = new StreamReader(fs);
//ファイルのすべての内容を読み込むためのReadToEndメソッドを使用します
string fileContent = sr.ReadToEnd();
//操作後にStreamReaderオブジェクトを閉じます
sr.Close();
fs.Close();

注意していただきたいのは、fi.Open()は3つの引数を持っています:

  • 第1引数はFileModeで、ファイルの作成および開き(ファイルが存在しない場合)を表します;

  • 第2引数FileAccessは、読み取り操作を表します;

  • 第3引数は、ファイルを開いた際に他のユーザーとファイルを共有して読み取りを許可するためのものです。

以下の例では、StreamWriterがストリングをファイルに書き込むことを簡単にする方法を示します:

例:StreamWriterを使用してテキストをファイルに書き込む

//指定されたパス用のFileInfoオブジェクトを作成            
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
        
//ファイルを読み取り・書き込み用に開きます
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read ); 
//ストリングをFileSreamに書き込むためのStreamWriterオブジェクトを作成
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Another line from streamwriter");
sw.Close();

同じFileStreamオブジェクトに対して同時に読み取りと書き込みを行うことはできません。ファイルを読み取っている場合、同一ファイルへの書き込みには別のFileStreamオブジェクトを作成してください。以下のようになります:

例:StreamReaderとStreamWriter

//DummyFile.txt用のFileInfoオブジェクトを作成
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//DummyFile.txtを読み操作用に開きます
FileStream fsToRead = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite , FileShare.ReadWrite); 
//DummyFile.txtを書き操作用に開きます
FileStream fsToWrite = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
          
//StreamReaderを取得
StreamReader sr = new StreamReader(fsToRead);
//StreamReaderオブジェクトを使用してすべてのテキストを読み取ります
string fileContent = sr.ReadToEnd();
sr.Close();
//StreamWriterを取得
StreamWriter sw = new StreamWriter(fsToWrite);
//StreamWriterでテキストを書き込む
sw.WriteLine("Another line from streamwriter");
sw.Close();
//すべてのStreamオブジェクトを閉じます
fsToRead.Close();
fsToWrite.Close();

したがって、FileInfo、StreamReader、StreamWriterクラスを使用して物理ファイルから読み取ることができます/内容を書き込む。