C# FileStream對象

來源:互聯網
上載者:User

標籤:

FileStream對象表示在磁碟或網路路徑上指向檔案的流。當類提供向檔案讀寫位元組的方法時,經常使用StreamReader或StreamWriter執行這些功能。這是因為FileStream類操作位元組和位元組數組,而Stream類操作字元資料。字元資料便於使用,但是有些操作比如隨機檔案訪問,就必須由FileStream對象執行。

FileStream對象的建構函式:

FileStream aFile = new FileStream(“Log.txt”,FileMode.OpenOrCreate);

 FileMode枚舉具有幾種成員:

Append------如果檔案存在,就開啟檔案,將檔案位置移動到檔案的末尾,並建立一個新檔案。FileMode.Append僅可以與枚舉Fileaccess.Write聯合使用

Create------建立新檔案;如果存在這樣的檔案,就破壞它。

CreateNew------建立新檔案,但是如果已經存在此檔案,則拋出異常

Open------開啟現有的檔案,但是不存在所指定的檔案,則拋出異常

OpenOrCreate------如果檔案存在,則規定開啟檔案,否則就建立新檔案,如果檔案已經存在,則保留在檔案中的資料

Truncate------開啟現有檔案,清除其內容,然後我們可以向檔案寫入全新的資料,但是保留檔案的初始建立日期,必須存在有檔案,否則就拋出異常

存取層級

前面的建構函式預設以唯讀模式開啟檔案,需要一個附加參數規定不同的存取層級,此參數是FileAccess參數。

FileStream aFile=new FileStream(”Log.txt”,fileMode.OpenOrCreate,FileAccess.Write)

FileAccess枚舉有三種類型:Read、Write、ReadWrite.此屬性的作用是:基於使用者的身分識別驗證層級改變使用者對檔案的訪問

讀取檔案的位置用seek:public long Seek(long offset,SeekOrigin origin)

 Long offset是規定檔案指標以位元組為單位的移動距離;SeekOrigin origin是規定開始計算的起始位置,此枚舉包含3個值:Begin,Current和End。

例:aFile.Seek(8,SeekOrigin.Begin);// SeekOrigin.Begin指得是檔案指標從檔案的第一個位元組起;而參數‘8‘指得是移動到檔案的第8個位元組

例2:afile.Seek(2,SeekOrigin.Current)//在當前位置開始,再移動2個位元組。

例3:aFile.Seek(-5,SeekOrigin.End)//在檔案末端位置開始,倒數5個位元組。

讀取資料

使用FileStream類讀取資料不像使用StreamReader和StreamWriter類讀取資料那麼容易,這是因為FileStream類只能處理原始位元組(raw byey),這使得FileStream類可以用於任何資料檔案,而不僅僅是文字檔,通過讀取位元組資料就可以讀取類似映像和聲音的檔案。這種靈活性的代價是不能使用它直接讀入字串,而使用StreamWriter和StreaMeader類卻可以這樣處理,從是有幾種轉換類可以很容易地將位元組數群組轉換為字元數組,或者進行相反的操作。

Read()方法是從FileStream對象所指向的檔案訪問資料的主要手段:

Public int Read(byte[] array,int offset, int count)//第一個參數是被傳輸進來的位元組數組,用以接受FileStream對象中的資料。第二個參數是位元組數組中開始寫入資料的位置,它通常是0,表示從數組的開端的檔案中向數組寫資料,最後一個參數是規定從檔案中讀出多少位元組。

寫入資料

寫入資料的流程是先擷取位元組數組,再把位元組資料轉換為字元數組,然後把這個字元數組用Write()方法寫入到檔案中,當然在寫入的過程中,可以確定在檔案的什麼位置寫入,寫多少字元等等。

檔案讀寫的範例:

讀取檔案
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace myFile
{
    class PRogram
    {
        static void Main(string[] args)
        {
            byte[] byData = new byte[100];//建立一個FileStream要用的位元組組
            char[] charData = new char[100];//建立一個字元組

            try
            {
                FileStream aFile = new FileStream("../../../../Data.txt", FileMode.Open);//執行個體化一個FileStream對象,用來操作data.txt檔案,操作類型是
                
                aFile.Seek(55, SeekOrigin.Begin);//把檔案指標指向,從檔案開始位置向前55位位元組所指的位元組
                aFile.Read(byData, 0, 100);//讀取FileStream對象所指的檔案到位元組數組裡
            }
            catch (IOException e)
            {
                Console.WriteLine("close");
                return;
            }
            Decoder d = Encoding.UTF8.GetDecoder();//
            d.GetChars(byData, 0, byData.Length, charData, 0);//將編碼位元組數群組轉換為字元數組

            Console.WriteLine(charData);
            Console.ReadLine();
            return;
        }
    }
}

寫入檔案:
 
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace myFile
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] byData = new byte[100];//建立一個FileStream要用的位元組組
            char[] charData = new char[100];//建立一個字元組

            try
            {
                FileStream aFile = new FileStream("../../../../Data.txt", FileMode.Open);//執行個體化一個FileStream對象,用來操作data.txt檔案,操作類型是
               
                charData = "我是誰?111?".ToCharArray();//將字串內的字元複製到字元組裡
                aFile.Seek(0, SeekOrigin.End);
                Encoder el = Encoding.UTF8.GetEncoder();//編碼器
                el.GetBytes(charData, 0, charData.Length, byData, 0, true);

                aFile.Write(byData, 0, byData.Length);
            }
            catch (IOException e)
            {
                Console.WriteLine("close");
                return;
            }
           
        }
    }
}

C# FileStream對象

相關文章

聯繫我們

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