FileInfo類提供與靜態(tài)File類相同的功能,但是您可以通過手動編寫用于從文件讀取或?qū)懭胱止?jié)的代碼來對文件的讀/寫操作具有更多控制權(quán)。
| 屬性 | 用法 |
|---|---|
| Directory | 獲取父目錄的實例。 |
| DirectoryName | 獲取表示目錄的完整路徑的字符串。 |
| Exists | 獲取一個值,該值指示文件是否存在。 |
| Extension | 獲取表示文件擴展部分的字符串。 |
| FullName | 獲取目錄或文件的完整路徑。 |
| IsReadOnly | 獲取或設(shè)置一個值,該值確定當(dāng)前文件是否為只讀。 |
| LastAccessTime | 獲取或設(shè)置上次訪問當(dāng)前文件或目錄的時間 |
| LastWriteTime | 獲取或設(shè)置上次寫入當(dāng)前文件或目錄的時間 |
| Length | 獲取當(dāng)前文件的大?。ㄒ宰止?jié)為單位)。 |
| Name | 獲取文件的名稱。 |
| 方法 | 用法 |
|---|---|
| AppendText | 創(chuàng)建一個StreamWriter,將文本追加到FileInfo的此實例表示的文件。 |
| CopyTo | 將現(xiàn)有文件復(fù)制到新文件,不允許覆蓋現(xiàn)有文件。 |
| Create | 創(chuàng)建一個文件。 |
| CreateText | 創(chuàng)建一個寫入新文本文件的StreamWriter。 |
| Decrypt | 使用Encrypt方法解密由當(dāng)前帳戶加密的文件。 |
| Delete | 刪除指定的文件。 |
| Encrypt | 加密文件,以便只有用于加密文件的帳戶才能解密該文件。 |
| GetAccessControl | 獲取一個FileSecurity對象,該對象封裝了指定文件的訪問控制列表(ACL)條目。 |
| MoveTo | 將指定的文件移動到新位置,并提供指定新文件名的選項。 |
| Open | 在指定的FileMode中打開一個。 |
| OpenRead | 創(chuàng)建一個只讀FileStream。 |
| OpenText | 創(chuàng)建具有UTF8編碼的StreamReader,該編碼器可從現(xiàn)有文本文件讀取。 |
| OpenWrite | 創(chuàng)建一個只寫FileStream。 |
| Replace | 用當(dāng)前FileInfo對象描述的文件替換指定文件的內(nèi)容,刪除原始文件,并創(chuàng)建替換文件的備份。 |
| ToString | 以字符串形式返回路徑。 |
下面的示例顯示如何手動從文件讀取字節(jié),然后使用UTF8編碼將它們轉(zhuǎn)換為字符串:
示例:使用FileInfo類讀取文件
//為指定路徑創(chuàng)建FileInfo對象
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//打開文件進行讀\寫
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
//創(chuàng)建與FileStream長度相同大小的字節(jié)數(shù)組
byte[] fileBytes = new byte[fs.Length];
//定義計數(shù)器以檢查要讀取多少字節(jié)。讀取每個字節(jié)時減少計數(shù)器
int numBytesToRead = (int)fileBytes.Length;
//計數(shù)器指示已讀取的字節(jié)數(shù)
int numBytesRead = 0;
//迭代直到從FileStream中讀取所有字節(jié)
while (numBytesToRead > 0)
{
int n = fs.Read(fileBytes, numBytesRead, numBytesToRead);
if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
//從FileStream中讀取所有字節(jié)后,即可使用UTF8編碼將其轉(zhuǎn)換為字符串
string filestring = Encoding.UTF8.GetString(fileBytes);如上面的代碼所示,您必須編寫許多代碼才能從FileSream讀取/寫入字符串。而使用 StreamReader 和 StreamWriter 可以輕松完成相同的讀/寫操作。
下面的示例顯示 StreamReader 如何使從文件中讀取字符串變得容易:
示例:使用 StreamReader 讀取文件
//為指定路徑創(chuàng)建FileInfo對象 FileInfo fi = new FileInfo(@"D:\DummyFile.txt"); //打開文件進行讀\寫 FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Read , FileShare.Read); //通過傳遞需要對其進行操作的FileStream對象來創(chuàng)建StreamReader的對象 StreamReader sr = new StreamReader(fs); //使用ReadToEnd方法從文件讀取所有內(nèi)容 string fileContent = sr.ReadToEnd(); //操作后關(guān)閉StreamReader對象 sr.Close(); fs.Close();
注意,fi.Open() 它具有三個參數(shù):
第一個參數(shù)是FileMode,用于創(chuàng)建和打開文件(如果文件不存在);
第二個參數(shù) FileAccess 表示讀取操作;
第三個參數(shù)是在打開文件時與其他用戶共享文件以供閱讀。
下面的示例顯示 StreamWriter 如何使將字符串寫入文件變得更容易:
示例:使用StreamWriter將文本寫入文件
//為指定路徑創(chuàng)建FileInfo對象
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
//打開文件進行讀\寫
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read );
//創(chuàng)建StreamWriter對象以將字符串寫入FileSream
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Another line from streamwriter");
sw.Close();不能同時對同一個 FileStream 對象執(zhí)行讀和寫操作。如果您已經(jīng)在讀取文件,請創(chuàng)建一個單獨的 FileStream 對象以寫入同一文件,如下所示:
示例:StreamReader和StreamWriter
//為DummyFile.txt創(chuàng)建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();
//關(guān)閉所有Stream對象
fsToRead.Close();
fsToWrite.Close();因此,您可以使用FileInfo,StreamReader 和 StreamWriter類從物理文件讀取/寫入內(nèi)容。