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)容。