天天看點

FileStream

1、使用FileStream讀寫檔案

檔案頭:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

讀檔案核心代碼:

byte[] byData = new byte[100];

char[] charData = new char[1000];

try

{

FileStream sFile = new FileStream("檔案路徑",FileMode.Open);

sFile.Seek(55, SeekOrigin.Begin);

sFile.Read(byData, 0, 100); //第一個參數是被傳進來的位元組數組,用以接受FileStream對象中的資料,第2個參數是位元組數組中開始寫入資料的位置,它通常是0,表示從數組的開端檔案中向數組寫資料,最後一個參數規定從檔案讀多少字元.

}

catch (IOException e)

{

Console.WriteLine("An IO exception has been thrown!");

Console.WriteLine(e.ToString());

Console.ReadLine();

return;

}

Decoder d = Encoding.UTF8.GetDecoder();

d.GetChars(byData, 0, byData.Length, charData, 0);

Console.WriteLine(charData);

Console.ReadLine();

寫檔案核心代碼:

FileStream fs = new FileStream(檔案路徑,FileMode.Create);

//獲得位元組數組

byte [] data =new UTF8Encoding().GetBytes(String);

//開始寫入

fs.Write(data,0,data.Length);

//清空緩沖區、關閉流

fs.Flush();

fs.Close();

2、使用StreamReader和StreamWriter

檔案頭:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

StreamReader讀取檔案:

StreamReader objReader = new StreamReader(檔案路徑);

      string sLine="";

      ArrayList LineList = new ArrayList();   

      while (sLine != null)

      {

        sLine = objReader.ReadLine();

        if (sLine != null&&!sLine.Equals(""))

          LineList.Add(sLine);

      }

            objReader.Close();

            return LineList;

StreamWriter寫檔案:

  FileStream fs = new FileStream(檔案路徑, FileMode.Create);

StreamWriter sw = new StreamWriter(fs);

//開始寫入

sw.Write(String);

//清空緩沖區

sw.Flush();

//關閉流

sw.Close();

fs.Close();

===================================================================================

方式一:用FileStream

//執行個體化一個儲存檔案對話框

            SaveFileDialog sf = new SaveFileDialog();

            //設定檔案儲存類型

            sf.Filter = "txt檔案|*.txt|所有檔案|*.*";

            //如果使用者沒有輸入擴充名,自動追加字尾

            sf.AddExtension = true;

            //設定标題

            sf.Title = "寫檔案";

            //如果使用者點選了儲存按鈕

            if(sf.ShowDialog()==DialogResult.OK)

            {

                //執行個體化一個檔案流--->與寫入檔案相關聯

                FileStream fs = new FileStream(sf.FileName,FileMode.Create);

                //獲得位元組數組

byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);

                //開始寫入

                fs.Write(data,0,data.Length);

                //清空緩沖區、關閉流

                fs.Flush();

                fs.Close();

            }

方式二:用StreamWriter

//執行個體化一個儲存檔案對話框

            SaveFileDialog sf = new SaveFileDialog();

            //設定檔案儲存類型

            sf.Filter = "txt檔案|*.txt|所有檔案|*.*";

            //如果使用者沒有輸入擴充名,自動追加字尾

            sf.AddExtension = true;

            //設定标題

            sf.Title = "寫檔案";

            //如果使用者點選了儲存按鈕

            if (sf.ShowDialog() == DialogResult.OK)

            {

                //執行個體化一個檔案流--->與寫入檔案相關聯

                FileStream fs = new FileStream(sf.FileName, FileMode.Create);

                //執行個體化一個StreamWriter-->與fs相關聯

                StreamWriter sw = new StreamWriter(fs);

                //開始寫入

                sw.Write(this.textBox1.Text);

                //清空緩沖區

                sw.Flush();

                //關閉流

                sw.Close();

                fs.Close();

            }

string FileName = Guid.NewGuid().ToString() + ".txt"; //GUID生成唯一檔案名

        StringBuilder ckpw = new StringBuilder("/"憑證輸出/", /"V800/", /"001/", /"東風随州專用汽車有限公司/"," + "/"F89自由項16/", /"F90稽核日期:/"");

        if (!FileIO.IsFolderExists(Server.MapPath("pzsc")))

            FileIO.CreaterFolder(Server.MapPath(""), "file://pzsc/");

        string filePath = Server.MapPath("pzsc") + "//" + FileName;

        System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath, false, Encoding.GetEncoding("GB2312"));//建立的時候需要指定編碼格式,預設是UTF-8,中文顯示亂碼

        sw.WriteLine(ckpw.ToString());

        sw.Close();

方式三:用BinaryWriter

//執行個體化一個儲存檔案對話框

            SaveFileDialog sf = new SaveFileDialog();

            //設定檔案儲存類型

            sf.Filter = "txt檔案|*.txt|所有檔案|*.*";

            //如果使用者沒有輸入擴充名,自動追加字尾

            sf.AddExtension = true;

            //設定标題

            sf.Title = "寫檔案";

            //如果使用者點選了儲存按鈕

            if (sf.ShowDialog() == DialogResult.OK)

            {

                //執行個體化一個檔案流--->與寫入檔案相關聯

                FileStream fs = new FileStream(sf.FileName, FileMode.Create);

                //執行個體化BinaryWriter

                BinaryWriter bw = new BinaryWriter(fs);

                bw.Write(this.textBox1.Text);

                //清空緩沖區

                bw.Flush();

                //關閉流

                bw.Close();

                fs.Close();

            }

C#緩存流示例------>用緩存流複制檔案

C#檔案處理操作必須先導入命名空間:using System.IO;

背景:使用VS2005、一個按鈕、一個窗體、C#緩存流、把D:/KuGoo/愛得太多.wma複制到D:/并更名為love.wma,即:D:/love.wma

在按鈕的Click事件中添加如下代碼:

private void button1_Click(object sender, EventArgs e)

        {

            //建立兩個檔案流 一個是源檔案相關,另一個是要寫入的檔案

            FileStream fs = new FileStream(@"D:/KuGoo/愛得太多.wma",FileMode.Open);

            FileStream fs2 = new FileStream(@"D:/love.wma",FileMode.Create);

            //建立一個位元組數組,作為兩者之間的媒介

            //好比兩個人拿蘋果,這個位元組數組就好比一個籃子,一個人作死的把蘋果送到籃子裡面,

            //而我就可以作死得拿蘋果,通過這個媒介我們互不幹擾,

            //不需要互相等待【她往籃子裡面放了蘋果我才可以去拿】,提高了效率

byte[] data = new byte[1024];

            //建立兩個緩沖流,與兩個檔案流相關聯

            BufferedStream bs = new BufferedStream(fs);

            BufferedStream bs2= new BufferedStream(fs2);

            //fs作死的讀,fs2作死的寫,直到fs沒有位元組可讀fs2就不寫了

           //好比,一個人作死的往籃子裡面丢蘋果,另一個人作死得往籃子裡面拿蘋果,直到籃子裡面沒有蘋果拿了為止

            //即-->那個人沒有蘋果往籃子裡面放了

            while(fs.Read(data,0,data.Length)>0)

            {

                fs2.Write(data,0,data.Length);

                fs2.Flush();

            }

            //關閉流,好比兩個人累了,都要休息 呵呵o(∩_∩)o...

            fs.Close();

            fs2.Close();

        }

C#記憶體流示例----->用記憶體流來讀取圖檔

C#檔案處理操作必須先導入命名空間:using System.IO;

背景:一個窗體、一個pictureBox、一個lable[沒有選擇圖檔,lable的text為"圖檔未選擇"],在pictureBox1的Click事件中添加如下代碼:

private void pictureBox1_Click(object sender, EventArgs e)

        {

            //執行個體化一個打開檔案對話框

            OpenFileDialog op = new OpenFileDialog();

            //設定檔案的類型

            op.Filter = "JPG圖檔|*.jpg|GIF圖檔|*.gif";

            //如果使用者點選了打開按鈕、選擇了正确的圖檔路徑則進行如下操作:

            if(op.ShowDialog()==DialogResult.OK)

            {

                //清空文本

                this.label1.Text = "";

                //執行個體化一個檔案流

                FileStream fs = new FileStream(op.FileName, FileMode.Open);

                //把檔案讀取到位元組數組

byte[] data = new byte[fs.Length];

                fs.Read(data, 0, data.Length);

                fs.Close();

                //執行個體化一個記憶體流--->把從檔案流中讀取的内容[位元組數組]放到記憶體流中去

                MemoryStream ms = new MemoryStream(data);

                //設定圖檔框 pictureBox1中的圖檔

                this.pictureBox1.Image = Image.FromStream(ms);

            }

        }

----------------------------------------行号--------------------------------------------

private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)

        {

            CommonHelper.SetGridCustomDrawRowIndicator(e);

        }

繼續閱讀