如何讀取和寫入至文字檔案,藉由使用Visual C#


摘要


本文將逐步說明如何讀取和寫入至文字檔案,藉由使用Visual C#。回到頁首

需求

下列清單概述了建議的硬體、 軟體、 網路基礎結構,以及您必須擁有的 service pack:
  • Visual C#
本文假設您已熟悉下列主題:
  • Visual C#
回到頁首

讀取和寫入文字檔

這份文件中讀取文字檔案的部分將說明如何使用StreamReader類別來讀取文字檔案。寫入文字檔案 (範例 1)寫入文字檔案 (範例 2)的各節描述如何使用StreamWriter類別,將文字寫入檔案。回到頁首

讀取文字檔

下列程式碼會使用StreamReader類別,以開啟、 讀取,並關閉文字檔案。您可以將文字檔案的路徑傳遞至StreamReader建構函式會自動開啟該檔案。ReadLine方法會讀取每一行文字,並遞增到下一行的檔案指標,因為它會讀取。當ReadLine方法達到檔案結尾時,它會傳回 null 參考。
  1. 在 「 記事本 」 建立範例文字檔案。若要執行這項操作,請參考下列步驟:
    1. 在 [記事本] 中,貼上下列文字:
      hello world
    2. 將檔案儲存為 Sample.txt 中。
  2. 啟動 Microsoft Visual Studio。
  3. 在 [檔案] 功能表上指向 [新增],然後按一下專案
  4. 按一下 [專案類型] 下的 [ Visual C# 專案,然後按一下 [Visual Studio 2005年或 Visual Studio 2008年中的範本附註] 下的 [主控台應用程式,請按一下Visual C#專案類型] 下,然後在 [範本] 下,按一下 [主控台應用程式
  5. Class1.cs 檔的開頭,加入下列程式碼:
    using System.IO;
    注意在 Visual Studio 2005年或 Visual Studio 2008年中,預設的檔案會是 Program.cs。
  6. 將下列程式碼加入至Main方法中:
    String line;try {//Pass the file path and file name to the StreamReader constructorStreamReader sr = new StreamReader("C:\\Sample.txt");//Read the first line of textline = sr.ReadLine();//Continue to read until you reach end of filewhile (line != null) {//write the lie to console windowConsole.WriteLine(line);//Read the next lineline = sr.ReadLine();}//close the filesr.Close();Console.ReadLine();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}   finally {Console.WriteLine("Executing finally block.");}
  7. 偵錯] 功能表中,按一下 [[開始],若要編譯並執行應用程式]。按 ENTER 鍵關閉主控台視窗。主控台視窗會顯示 Sample.txt 檔案的內容。
    Hello world
回到頁首

寫入文字檔案 (範例 1)

下列程式碼會使用StreamWriter類別,以開啟、 寫入,並關閉文字檔案。StreamReader類別類似的方式,您可以傳遞StreamWriter建構函式會自動開啟該檔案的文字檔案的路徑。WriteLine方法會將完整的一行文字寫入文字檔。
  1. 啟動 Visual Studio。
  2. 在 [檔案] 功能表上指向 [新增],然後按一下專案
  3. 按一下 [專案類型] 下的 [ Visual C# 專案,然後在 [範本] 之下按一下 [主控台應用程式注意 在 Visual Studio 2005年或 Visual Studio 2008年中,按一下 [視覺 C#專案類型] 下,然後按一下CLR 主控台應用程式在 [範本] 下。
  4. Class1.cs 檔的開頭,加入下列程式碼:
    using System.IO;
  5. 將下列程式碼加入至Main方法中:
    try {//Pass the filepath and filename to the StreamWriter ConstructorStreamWriter sw = new StreamWriter("C:\\Test.txt");//Write a line of textsw.WriteLine("Hello World!!");//Write a second line of textsw.WriteLine("From the StreamWriter class");//Close the filesw.Close();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}
  6. 偵錯] 功能表中,按一下 [[開始],若要編譯並執行應用程式]。這段程式碼會建立在文字編輯器,例如 「 記事本 」 中的磁碟機 c 開啟 Test.txt 稱為 Test.txt 檔案。將 Test.txt 包含兩行文字:
    Hello World!!From the StreamWriter class
回到頁首

寫入文字檔案 (範例 2)

下列程式碼會使用StreamWriter類別,以開啟、 寫入,並關閉文字檔案。不同於前例中,這段程式碼會將兩個額外的參數傳遞至建構函式。第一個參數是檔案路徑和檔案名稱的檔案。第二個參數,則為True,可讓您指定的檔案開啟在新增模式。如果您指定第二個參數,則為 False ,則檔案的內容會覆寫每次您執行程式碼。第三個參數指定UnicodeStreamWriter將編碼的 Unicode 格式中的檔案。您也可以指定下列編碼方法的第三個參數:
  • ASC11
  • Unicode
  • UTF7
  • UTF8
Write方法是使用WriteLine方法時,類似,不同之處在於Write方法不會自動內嵌換行] 或 [換行 (CR/LF) 字元組合。當您想要一次可以書寫一個字元,這非常有用。
  1. 啟動 Visual Studio。
  2. 在 [檔案] 功能表上指向 [新增],然後按一下專案
  3. 按一下 [專案類型] 下的 [ Visual C# 專案,然後按一下 [Visual Studio 2005年或 Visual Studio 2008年中的範本附註] 下的 [主控台應用程式,請按一下Visual C#專案類型] 下,然後按一下 [範本] 下的 [主控台應用程式
  4. Class1.cs檔的開頭,加入下列程式碼:
    using System.IO;using System.Text;
    注意在 Visual Studio 2005年或 Visual Studio 2008年中,預設的檔案會是 Program.cs。
  5. 將下列程式碼加入至Main方法中:
    Int64 x;try {//Open the FileStreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII);//Writeout the numbers 1 to 10 on the same line.for(x=0; x < 10; x++){sw.Write(x);}//close the filesw.Close();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}
  6. 偵錯] 功能表中,按一下 [[開始],若要編譯並執行應用程式]。這段程式碼會建立在文字編輯器,例如 「 記事本 」 中的磁碟機 c 開啟 Test1.txt 名為 Test1.txt 的檔案。Test1.txt 包含單行文字:
    0123456789
回到頁首

完整的程式碼清單

  • 讀取文字檔
    //Read a Text Fileusing System;using System.IO;namespace readwriteapp{class Class1{[STAThread]static void Main(string[] args){String line;try {//Pass the file path and file name to the StreamReader constructorStreamReader sr = new StreamReader("C:\\Sample.txt");//Read the first line of textline = sr.ReadLine();//Continue to read until you reach end of filewhile (line != null) {//write the lie to console windowConsole.WriteLine(line);//Read the next lineline = sr.ReadLine();}//close the filesr.Close();Console.ReadLine();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}}}}
  • 寫入文字檔案 (第 1 版)
    //Write a text file - Version-1using System;using System.IO;namespace readwriteapp{class Class1{[STAThread]static void Main(string[] args) {try {//Pass the filepath and filename to the StreamWriter ConstructorStreamWriter sw = new StreamWriter("C:\\Test.txt");//Write a line of textsw.WriteLine("Hello World!!");//Write a second line of textsw.WriteLine("From the StreamWriter class");//Close the filesw.Close();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}}}}
  • 寫入文字檔案 (第 2 版)
    //Write a text file  - Version 2using System;using System.IO;using System.Text;namespace readwriteapp{class Class1{[STAThread]static void Main(string[] args) {   Int64 x;try {//Open the FileStreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII);//Writeout the numbers 1 to 10 on the same line.for(x=0; x < 10; x++){sw.Write(x);}//close the filesw.Close();}catch(Exception e){Console.WriteLine("Exception: " + e.Message);}finally {Console.WriteLine("Executing finally block.");}}}}

疑難排解

對於所有的檔案操作,是良好的程式設計作法換行內部try-catch-finally區塊來處理錯誤和例外狀況的程式碼。明確地說,您可以釋放最後的區塊中的檔案控點,使檔案未無限期鎖定。一些可能的錯誤包括不存在,檔案或檔案已在使用中。回到頁首

參考


如需詳細資訊,請造訪下列 Microsoft 開發人員網路 (MSDN) 網站:回到頁首