close

C# 與檔案處理

簡介

C# 當中的檔案主要以串流 (Stream) 的形式呈現,串流讀取器 (StreamReader) 與串流寫入器 (StreamWriter) 是兩個主要的檔案處理類別。另外像 File,FileInfo, DirectoryInfo 等,則是用來存取檔案屬性與資料夾的類別。而BufferedStream、FileStream、MemoryStream、NetworkStream 則是分別對應到緩衝、檔案、記憶體、網路等類型的串流物件。因此串流可以說是檔案與網路的共同介面。

範例一

以下範例中的 fileToText() 函數,會將一個文字檔讀入放到字串中傳回,其方法是利用 StreamReader 物件,指定所要讀取的檔案,然後利用 readToEnd() 函數讀取整個文字檔,再用 Close() 函數關閉該檔案。

using System;
using System.IO;
class FileTest 
{
    public static void Main(String[] args)
    {
        String text = fileToText(args[0]);
        Console.WriteLine(text);
    }
    public static String fileToText(String filePath)
    {
        StreamReader file = new StreamReader(filePath);
        String text = file.ReadToEnd();
        file.Close();
        return text;
    }
}
	

上述範例的執行結果如下所示,必須注意的是,Hello.txt 檔案必須存在,而且儲存成 Unicode 的 UTF8 格式,這是因為 C# 內部預設使用 Unicode 的編碼格式。如果希望讀取 Big5 (或 GB2312) 格式的檔案,必須在 StreamReader() 建構函數當中,指定StreamReader file = new StreamReader(filePath, System.Text.Encoding.GetEncoding("Big5")) ,如此 StreamReader 才會以 Big5 的編碼方式對檔案進行讀取,結果才不會變成亂碼。

D:\>csc FileTest.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
D:\>FileTest Hello.txt
Hello !
你好 !
	

範例二

using System;
using System.IO;
class FileTest
{
    public static void Main(String[] args)
    {
        String text1 = "Hello, C#!";
        String file = "Hello.txt";
        textToFile(file, text1);
        String text2 = fileToText(file);
        Console.WriteLine(text2);
    }
    public static String fileToText(String filePath)
    {
        StreamReader file = new StreamReader(filePath);
        String text = file.ReadToEnd();
        file.Close();
        return text;
    }
    public static void textToFile(String filePath, String text)
    {
        StreamWriter file = new StreamWriter(filePath);
        file.Write(text);
        file.Close();
    }
}
	

執行結果

Hello, C#!
	

範例三:物件導向寫法

using System;
using System.IO;
class File
{
    String path;
    public static void Main(String[] args)
    {
        File file = new File("Hello.txt");
        file.save("Hello, C#!");
        String text2 = file.load();
        Console.WriteLine(text2);
    }
    public File(String path)
    {
        this.path = path;
    }
    public String load()
    {
        StreamReader file = new StreamReader(path);
        String text = file.ReadToEnd();
        file.Close();
        return text;
    }
    public void save(String text)
    {
        StreamWriter file = new StreamWriter(path);
        file.Write(text);
        file.Close();
    }
}
	

執行結果

Hello, C#!
	

範例四:更物件導向的寫法

using System;
using System.IO;
class TextFile
{
    String path;
    String text;
    public static void Main(String[] args)
    {
        TextFile file = new TextFile();
        file.load(args[0]).print();
    }
    public TextFile() {}
    public TextFile load(String path)
    {
        this.path = path;
        StreamReader file = new StreamReader(path);
        text = file.ReadToEnd();
        file.Close();
        return this;
    }
    public TextFile save()
    {
        StreamWriter file = new StreamWriter(path);
        file.Write(text);
        file.Close();
        return this;
    }
    public TextFile print()
    {
        Console.WriteLine("file: path="+path);
        Console.WriteLine(text);
        return this;
    }
}
	

執行結果

C:\ccc>csc TextFile.cs
Microsoft (R) Visual C# 2005 Compiler version 8.00.50727.3053
for Microsoft (R) Windows (R) 2005 Framework version 2.0.50727
Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.
C:\ccc>TextFile Hello.txt
file: path=Hello.txt
Hello, C#!
C# 真有趣!
I love C#.
	

文章來源:陳鍾誠 (2010年06月10日),(網頁標題) C# 與檔案處理,(網站標題) 免費電子書:C# 程式設計,2010年06月10日,取自 http://cs0.wikidot.com/files ,網頁修改第 4 版。

arrow
arrow
    創作者介紹
    創作者 Johnson峰 的頭像
    Johnson峰

    Johnson峰的部落格

    Johnson峰 發表在 痞客邦 留言(0) 人氣()