.net(C#)操作文件的幾種方法匯總
System.IO命名空間下類的用法:
在System.IO名稱空間中包含了用於文件輸入輸出的主要類。
File:實用類,提供許多靜態方法,用於移動、復制和刪除文件。
Directory:實用類,提供許多靜態方法,用於移動、復制和刪除目錄。
Path:實用類,用於處理路徑名稱。
FileInfo:表示磁盤上的物理文件,具有可以處理此文件的方法。要完成對文件的讀取和寫入工作,就必須創建Stream對象。
DirectoryInfo:表示磁盤上的物理目錄,具有可以處理此目錄的方法。
FileStream:表示可以被寫或被讀,或二者均可的文件。此文件可以同步或異步的讀和寫。
StreamReader:從流中讀取字符數據,並可以通過使用FileStream被創建為基類。
StreamWriter:向流寫字符數據,可以通過使用FileStream被創建為基類。
FileSystemWatcher:用於監控文件和目錄,並在這些位置發生變化時,給出應用程序可以捕獲的事件。
示例代碼片段:
1.讀取文件:StreamReader和StreamWrite操作的的字符串
FileStream的用法
System.IO.FileStream fs = new FileStream("Test.txt", FileMode.OpenOrCreate,FileAccess.Read);
char[] cs = new char[fs.Length];
byte[] bs = new byte[fs.Length];
fs.Read(bs,0,(int)fs.Length);
Encoding e = System.Text.Encoding.UTF8;
cs=e.GetChars(bs);
foreach (char c in cs)
{
Console.WriteLine(c);
}
StreamReader的用法:
string str;
using (StreamReader sr = new StreamReader("Test.txt"))
{
while ((str = sr.ReadLine()) != null)
{
Console.WriteLine(str);
}
}
2.寫入文件:
FileStream的用法:FileStream操作的是字節數組。而字節數據又要通過Encoding類把字節數組和字符數組進行轉換。
System.IO.FileStream fs = new FileStream("Test.txt", FileMode.Truncate);
string str = "Hello,this is my cc";
byte[] array = new byte[str.Length];
System.Text.Encoding e = System.Text.UTF8Encoding.UTF8;
array=e.GetBytes(str);
fs.Write(array, 0, array.Length);
StreamWrite的用法:
using (StreamWriter sw = new StreamWriter("Test.txt",true,Encoding.GetEncoding("gb2312")))
{
sw.WriteLine("你好不好,我想你");
}
File類一些常用的靜態方法:
方法說明:
Copy()
將文件復制到規定的位置
Create()
在規定的路徑上創建文件
Delete()
刪除文件
Open()
在規定的路徑上返回FileStream對象
Move()
將規定的文件移動到新位置。可以在新位置為文件規定不同的名稱
Directory類一些常用的靜態方法:
方法說明
CreateDirectory()
創建具有規定路徑的目錄
Delete()
刪除規定的目錄以及其中的所有文件
GetDirectories()
返回表示當前目錄之下的目錄的Directory對象的數組
GetFiles()
返回在當前目錄中的File對象的數組
Move()
將規定的目錄移動到新位置。可以在新位置為文件夾規定一個新名稱
FileInfo類:
它沒有靜態方法,僅可用於實例化的對象。FileInfo對象表示在磁盤或網絡位置的文件。注意它不是流。為了實現對文件的讀取或寫入,必須創建Stream對象。
如果僅在對象上進行單一方法調用,則可以使用靜態File類。在此,靜態調用要快一些,因為.Net Framework不必遍歷實例化新對象並調用方法的過程。但是如果應用程序在文件上執行幾種操作,在實例化FileInfo對象並使用其方法就更好一些。這會節省時間,因為對象將在文件系統上引用正確的文件,而靜態類就必須每次都尋找文件。
FileInfo類提供的基礎性的屬性,可用來更新文件。
屬性
說明
Attributes
獲取或者設置當前文件的屬性
CreationTime
獲取當前文件的創建日期和時間
DirectoryName
返回文件目錄的路徑
Exists
判斷是否存在文件
FullName
檢索文件的完整路徑
Length
獲取文件的容量
Name
僅僅返回文件的名稱,而不是完整的文件位置路徑
DirectoryInfo類:
DirectoryInfo類的作用類似於FileInfo類。它是一個實例化的對象,表示計算機上的單一目錄。同FileInfo類—樣,在Directory和DirectoryInfo之間可以復制許多方法調用。當使用這二者時,可以便用相同的原則:如果進行單一調用,就使用靜態Directory類。如果進行一系列調用,則使用實例化的DirectoryInfo對象。
DirectoryInfo類與FileInfo類共享幾乎所有相同的屬性,DirectoryInfo類作用在無文件的目錄上除外。
FileStream對象:
表示在磁盤或網絡路徑上指向文件的流。當類提供向文件讀取和寫入字節的方法時,經常使用StreamReader和StreamWriter執行這些功能。這是因為FileStream類操作字節和字節數組,而Stream類操作字符數據。
還有幾種方法可以創建FileStream對象。構造函數具有許多不同的重載/版本,但是最簡單的構造函數僅僅帶有兩個參數,即文件名和FileMode枚舉。
FileStream aFile = new FileStream("a.txt",FileMode.OpenOrCreate);
FileMode枚舉的成員:
FileMode枚舉成員
說明
Append
如果文件存在,就打開文件,將文件位置移動到文件的末尾,並創建個新文件。FileMode.Append僅可以與枚舉FileAccess.Write聯合使用
Create
創建新文件,如果存在這樣的文件就破壞它
CreateNew
創建新文件,但是如果已經存在了此文件,則拋出異常
Open
打開現有的文件。如果不存在所規定的文件,則拋出異常
OpenOrCreate
如果文件存在,則規定打開文件,否則就創建新文件。如果文件已經存在,則保留在文件中的數據
Truncate
打開現有文件,清除其內容。然后我們可以向文件寫入全新的數據,但是保留文件的初始創建日期。必須存在有文件,否則就會拋出異常
前面的構造函數默認以只讀模式打開文件。需要一個附加參數規定不同的訪問級別,此參數即FileAccess參數。
FileStream aFile = new FileStream("a.txt",FileMode.OpenOrCreate,FileAccess.Write);
此行代碼將打開文件,對文件進行寫訪問。對文件的任何讀的企圖都會導致拋出異常。僅有3種類型的FileAccess枚舉:Read,ReadWirte和Write。可以打開一個文件,只讀、只寫或進行讀寫操作。此屬性的作用是:基於用戶的身份驗證級別改變用戶對文件的訪問。
付出最大努力,追求最高成就。
