C#學習筆記:檔案操作

來源:互聯網
上載者:User

C#學習筆記:檔案操作

如何讀寫檔案:
通常來講,用C#程式讀寫一個檔案需要以下五個基本步驟
(1)建立檔案流。
(2)建立閱讀器或者寫入器
(3)執行讀寫操作
(4)關閉閱讀器或者寫入器
(5)關閉檔案流

需要命名空間:using System.IO;

讀取器:
  //建立檔案流
  FileStream myfs = new FileStream("路徑", FileMode.Open);
  //建立讀取器,傳入的是檔案流
  StreamReader mysw = new StreamReader(myfs);
  //讀取全部內容,傳回值為String
  mysw.ReadToEnd();
  //關閉讀取器
  mysw.Close();
  //關閉檔案流
  myfs.Close();

寫入器:
  //建立檔案流
  FileStream myfs = new FileStream("路徑", FileMode.Create);
  //建立讀取器,傳入的是檔案流
  StreamReader mysw = new StreamReader(myfs);
  //將錄入的內容寫入檔案,將會儲存到myfs裡面的路徑下的檔案裡面
  mysw.Write("文本值");
  //關閉寫入器
  mysw.Close();
  //關閉檔案流
  myfs.Close();

關閉順序一定要注意,先是關閉讀寫器然後才關閉檔案流。順序不能錯!

-----------------------------------檔案流-----------------------------------

讀寫檔案的第一步是建立一個檔案流。流是一個用於資料轉送的對象。這裡使用的檔案流是FileStream類,它主要用於讀寫檔案中的資料,在建立一個檔案流時,需要在它的建構函式中指定參數

文法:
FileStream 檔案對象 = new FileStream(string FilePath,FileMode);

其中FilePath用於指定要操作的檔案,而FileMode指定開啟檔案的模式,它是一個枚舉類型。該枚舉的不同成員如下
Create:用於定的名稱建立一個檔案。如果檔案存在,則改寫舊檔案。

CreateNew:建立一個檔案。如果檔案存在就會發生異常,提示檔案已經存在。

Open:開啟一個檔案,使用這個枚舉值時,指定的檔案必須存在,否則會發生異常

OpenOrCreate:OpenOrCreate與Open成員類似,只是如果檔案不存在,則用指定的名稱建立一個檔案並開啟它。

Append:開啟現有檔案,並在檔案尾追加內容。

FileMode枚舉還有其他成員,在這裡我們就不再做列舉

路徑非法問題:
C#程式內部不支援"C:\Text.txt"。

解決方案:
(1)將路徑改為"C:\\Text.txt"。這是C#支援的標準寫法
(2)@"C:\Text.txt",使用轉義符@

---------------------------------檔案讀寫器---------------------------------
StreamWriter寫入器
寫入器的主要方法如下:
 StreamWriter.Write();用於寫入流,這個流就是我們建立好的流
 StreamWriter.WriteLine();用於寫入一行資料,寫入某些資料後跟分行符號
 StreamWriter.Close();用於關閉寫入器

StreamReader讀取器
讀取器的主要方法如下:
 StreamReader.ReadToEnd();從當前位置讀到末尾,返回字串
 StreamReader.ReadLine();用於讀取檔案流中的一行資料,返回字串
 StreamReader.Close();用於關閉讀取器
--------------------------------- 亂碼問題 ---------------------------------
Encoding類指定字元編碼。Encoding類位於System.Text命名空間,用來表示字元編碼。
可以用Encoding類的靜態成員指定編碼格式。比如:
    Encoding.UTF8:擷取UTF-8格式的編碼
    Encoding.Default:擷取作業系統的當前編碼
也可以通過Encoding類的靜態方法GetEncoding(String name)指定字元編碼,參數name必須C#支援的編碼名。例如:
    StreamReader mysw = new StreamReader(myfs,Encoding.GetEncoding("BIG5"));

以下是各種常見的編碼:
    (1)ASCII:美國資訊交換標準碼。適用於純英文環境,但不適合英語之外的環境
    (2)ANSI:向下相容ASCII,並且保留空餘位置處理一些特殊字元。
    (3)GB2313:中國國家標準的漢字編碼,它收錄的漢字基本滿足漢字的電腦處理需求。但不支援繁體中文編碼,後來又增加了GBK字元集、BIG5字元集。
    (4)Unicode:國際組織制定的可以容納世界上所有文字和符號的字元編碼方案。由於Unicode編碼所佔用的空間較大,所以出現了一些中間格式的字元集,它們被稱為通用轉換格式,即UTF(Universal Transformation Format)。目前存在的UTF格式有UTF-7、UTF-8、UTF-16、UTF-32。UTF-8是Unicode的一種變長字元編碼,現在已被標準化為RFC 3629。UTF-8便於不同的電腦之間使用網路傳輸不同語言和編碼的文字,使得雙位元組的Unicode能夠在現存的處理單位元組的系統上正確傳輸。C#語言內容預設支援UTF-8編碼。
------------------------------ 檔案和目錄操作 ------------------------------
File類:用來移動檔案,複製檔案,刪除檔案
     File類的常用方法
方法 說明
Exists(string path) 用於檢查指定檔案是否存在,返回bool值
Copy(string path,string path)   將指定路徑的源檔案中的內容複寫到目標檔案中,
如果目標檔案不存在,則在指定路徑建立一個檔案
Move(string path,string path) 將指定檔案移到一個新的路徑
Delete(string path) 刪除指定檔案,如果指定檔案不存在,不引發異常

Directory類:Directory類是用來對檔案夾進行操作的
    Directory類的常用方法
方法 說明
Exists(string path) 用於檢查指定檔案夾在磁碟上是否存在
Move(string path,string path) 用於將檔案或目錄及內容移到新位置
Delete(string path) 刪除指定目錄,如果bool值為true,則刪除子目錄
中的所有目錄內容

File類和Directory類都屬於靜態類,不需要執行個體化

FileInfo類:FileInfo類和File類的功能相似,但是需要執行個體化。
FileInfo fi = new FileInfo(path);//執行個體化的時候需要將檔案路徑傳入進去
     FileInfo類的常用方法
屬性 說明
Exists 用於檢查指定檔案是否存在,返回bool值
Extension 擷取表示副檔名部分的字串
Name 擷取檔案名稱
FullName 擷取目錄或檔案的完成目錄
方法 說明
CopyTo(string path)   將現有檔案複製到新檔案,不允許覆蓋現有檔案Delete()
永久刪除檔案
MoveTo(string path) 將指定檔案移到一個新的路徑

DirectoryInfo類:DirectoryInfo類與Directory類類似,需要執行個體化
DirectoryInfo di = new DirectoryInfo (path);//執行個體化的時候
需要將檔案夾路徑傳入進去
        //返回目前的目錄的子目錄
        DirectoryInfo[] subDir = di.GetDirectories();
//返回目前的目錄的檔案清單
  FileInfo[] fi = di.GetFile();
(1)GetDirectories():DirectoryInfo調用返回對象數組,Directory調用返回子目錄名稱數組
(2)GetFile():DirectoryInfo調用返回對象數組,Directory調用返回子目錄名稱數組

如何取捨FileInfo類和File類和DirectoryInfo類與Directory類?
答:File類和Directory類都是靜態類,每次調用方法在使用時都會進行安全檢查,所以如果要多次對某個檔案或者檔案夾進行操作的話,可以優先考慮FileInfo類和DirectoryInfo類

----------------------------------- 總結 -----------------------------------
(1)讀寫檔案的五個步驟:建立檔案流、建立讀寫器、讀寫檔案、關閉讀寫器、關閉檔案流。
(2)檔案流的類是FileStream,建立一個檔案流時,需要指定操作文本的路徑、檔案的開啟檔案和檔案的訪問方式。
(3)StreamWriter是一個寫入器,StramReader是一個讀取器。讀寫文字檔可以直接使用讀寫器,不用建立檔案流,但是不容易控制文本的開啟檔案和訪問方式
(4)File類用於對檔案進行操作,如複製、移動、刪除等,Directory類用於對檔案夾操作,它們都是靜態類。
(5)靜態類只包含靜態成員,非靜態類可以包含靜態成員;靜態類不能包含執行個體成員,非靜態類可以包含執行個體成員;靜態類使用類名訪問其成員,非靜態類使用它的執行個體對象訪問成員。
(6)FileInfo類與File類功能類似,也可以完成對檔案的基本操作。不同的是File類不可以執行個體化對象。如果打算多次重用某個檔案對象,可以優先考慮使用FileInfo類,因為並不總是需要安全檢查
(7)DirectoryInfo類與Directory類功能類似,可以完成對檔案夾的基本操作。如果打算多次重用某個目錄對象,可以考慮使用DirectoryInfo類的執行個體方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.