C#中的檔案操作

來源:互聯網
上載者:User

微軟的.Net架構為我們提供了基於流的I/O操作方式,這樣就大大簡化了開發人員的工作。因為我們可以對一系列的通用對象進行操作,而不必關心該I/O操作是和原生檔案有關還是和網路中的資料有關。.Net架構主要為我們提供了一個System.IO命名空間,該命名空間基本包含了所有和I/O操作相關的類。

本文將向大家介紹一些基本的檔案操作方法,包括對檔案系統中的目錄和檔案的操作,還有就是檔案的讀寫操作等。通過運用System.IO.DirectoryInfo類和System.IO.FileInfo類我們可以輕易的完成與目錄和檔案相關的操作,而通過運用System.IO.StreamReader類和System.IO.StreamWriter類我們可以方便的完成與檔案的讀寫相關的操作。

  命名空間概覽

下面的表格顯示了System.IO命名空間中最重要的一些類,通過運用這些類我們就能完成基本的檔案操作。

  表1

 

類名 功能和用途
BinaryReader、BinaryWriter 讀寫位元據
Directory、File、DirectoryInfo以及FileInfo 建立、刪除並移動目錄和檔案,通過屬性擷取特定目錄和檔案的相關資訊
FileStream 以隨機方式訪問檔案
MemoryStream 訪問儲存在記憶體中的資料
StreamReader 、StreamWriter 讀寫文本資料資訊
StringReader、StringWriter 運用字串緩衝讀寫文本資料資訊

  運用DirectoryInfo類和FileInfo類

DirectoryInfo類和FileInfo類的基類都是FileSystemInfo類,這個類是一個抽象類別,也就是說你不可以執行個體化該類,只能通過繼承產生其子類並執行個體化其子類。然而你卻可以運用由該類定義的各種屬性,下面的表格顯示了該類已經定義了的各種屬性。

  表2

 

屬性 功能和用途
Attributes 返回和檔案相關的屬性值,運用了FileAttributes枚舉類型值
CreationTime 返迴文件的建立時間
Exists 檢查檔案是否存在於給定的目錄中
Extension 返迴文件的副檔名
LastAccessTime 返迴文件的上次訪問時間
FullName 返迴文件的絕對路徑
LastWriteTime 返迴文件的上次寫操作時間
Name 返回給定檔案的檔案名稱
Delete() 刪除一個檔案的方法,請務必謹慎地運用該方法

DirectoryInfo類提供了建立、刪除和移動目錄等方法,要運用表2中的各種屬性,我們首先得建立一個DirectoryInfo類的對象,然後就可以訪問其各種屬性了。

DirectoryInfo dir1 = new DirectoryInfo(@"F:/Test");Console.WriteLine("Full Name is : {0}", dir1.FullName);Console.WriteLine("Attributes are : {0}", dir1.Attributes.ToString());

同時,我們還可以運用FileAttributes枚舉類型值來擷取和檔案相關的各種屬性,下面的表格就顯示了該枚舉類型中的各種值。

  表3

 

功能和用途
Archive 返迴文件的存檔狀態
Compressed 返迴文件是否被壓縮
Directory 返迴文件是否是一個目錄
Encrypted 返迴文件是否被加密
Hidden 返迴文件是否是隱藏的
Offline 表明檔案資料是不可得的
ReadOnly 表明檔案是唯讀
System 表明檔案是一個系統檔案

  目錄下的檔案操作

運用DirectoryInfo類的對象我們可以輕鬆的實現對目錄以及和目錄中的檔案相關的操作,假如你要獲得某個目錄F:/Pictures下的所有BMP檔案,那麼通過下面的代碼就可以實現該功能。

DirectoryInfo dir = new DirectoryInfo(@"F:/ Pictures");FileInfo[] bmpfiles = dir.GetFiles("*.bmp);Console.WriteLine("Total number of bmp files", bmpfiles.Length);Foreach( FileInfo f in bmpfiles){  Console.WriteLine("Name is : {0}", f.Name);  Console.WriteLine("Length of the file is : {0}", f.Length);  Console.WriteLine("Creation time is : {0}", f.CreationTime);  Console.WriteLine("Attributes of the file are : {0}",                    f.Attributes.ToString());}

上面的代碼中我們首先建立了一個DirectoryInfo對象,然後通過調用該對象的GetFiles方法擷取目錄F:/Pictures下的所有以bmp為副檔名的檔案,該方法返回的值是一個FileInfo類型的數組,每個元素則代表一個檔案。最後,程式還列舉了每個BMP檔案的相關屬性。

  建立子目錄

運用DirectoryInfo類建立子目錄是非常容易的,你只要調用其中CreateSubdirectory()方法即可,示範代碼如下。

DirectoryInfo dir = new DirectoryInfo(@"F:/ Pictures");try{  dir.CreateSubdirectory("Sub");  dir.CreateSubdirectory(@"Sub/MySub");}catch(IOException e) {  Console.WriteLine(e.Message);}

  運用FileInfo類建立、刪除檔案

通過FileInfo類,我們可以方便地建立出檔案,並可以訪問檔案的屬性同時還可以對檔案進行開啟檔案、關閉檔案、讀寫檔案等基本的操作。下面的代碼顯示了如何建立一個文字檔並且去訪問其建立時間、檔案的絕對路徑以及檔案屬性等檔案資訊,最後程式還給出了刪除檔案的方法。

FileInfo fi = new FileInfo(@"F:/Myprogram.txt");FileStream fs = fi.Create();Console.WriteLine("Creation Time: {0}",fi.CreationTime);Console.WriteLine("Full Name: {0}",fi.FullName);Console.WriteLine("FileAttributes: {0}",fi.Attributes.ToString());Console.WriteLine("Press any key to delete the file");Console.Read();fstr.Close();fi.Delete();

  理解FileInfo類的Open()方法

我們在對檔案進行讀寫操作之前必須開啟檔案,FileInfo類為我們提供了一個Open()方法,該方法包含了兩個枚舉類型值的參數,一個為FileMode枚舉類型值,另一個為FileAccess枚舉類型值。通過設定這兩個參數值,我們可以對檔案的訪問模式和操作許可權進行控制。下面的兩個表格分別顯示了FileMode枚舉類型的值和FileAccess枚舉類型的值。

  表4

 

功能和用途
Append 開啟檔案並添加資料,運用該方法時FileAccess枚舉類型值應為Write。
Create 建立一個新檔案,有可能會覆蓋已經存在的檔案。
CreateNew 建立一個新檔案,如果該檔案已經存在,則拋出IOException異常。
Open 開啟一個已經存在的檔案。
OpenOrCreate 開啟檔案,如果該檔案不存在,則建立之。
Truncate 截短一個已經存在的檔案。

  表5

 

功能和用途
Read 可以從一個檔案中讀取資料。
ReadWrite 可以從一個檔案中讀取資料,同時還可以向檔案中寫入資料。
Write 可以向檔案中寫入資料。

下面的代碼顯示了Open()方法的具體運用方法。

FileInfo f = new FileInfo("F:/MyFile.txt");FileStream s = f.Open(FileMode.OpenorWrite, FileAccess.Read);

  運用StreamReader類和StreamWriter類實現檔案的讀寫操作

對檔案的讀寫操作應該是最重要的檔案操作,System.IO命名空間為我們提供了諸多檔案讀寫操作類,在這裡我要向大家介紹最常用也是最基本的StreamReader類和StreamWriter類。從這兩個類的名稱我們不難發現它們都是基於流的讀寫操作類。

我們可以通過File類的OpenText()方法來擷取一個StreamReader對象,通過該對象我們可以實現對文字檔的讀操作,方法如下:

Console.WriteLine("Reading the contents from the file");StreamReader s = File.OpenText("MyText.txt");string read = null;while ((read = s.ReadLine()) != null){  Console.WriteLine(read);}s.Close();

而通過調用FileInfo類的CreateText()方法我們可以擷取一個StreamWriter對象,調用StreamWriter類的WriteLine()我們就可以向文字檔中寫入資料了,方法如下:

FileInfo f = new FileInfo("MyText.txt")StreamWriter w = f.CreateText();w.WriteLine("This is from");w.WriteLine("Chapter 1");w.WriteLine("Of C# Module");w.Write(w.NewLine);w.WriteLine("Thanks for your time");w.Close();
 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.