1. 程式人生 > >【C#】對文字、圖片、音訊檔案的讀取與寫入

【C#】對文字、圖片、音訊檔案的讀取與寫入

對於檔案的儲存都採用流(System.IO.Stream)形式儲存與讀取
1.檔案流——FileStream 包括: StreamWriter和 BinaryWriter
2.快取流——BufferStream
3.記憶體流——MemoryStream
4.網路流——NetworkStream
注:針對文字形式的採用————StreamWriter和 StreamReader類;
    對與圖片,壓縮檔案等二進位制流檔案採用———— BinaryWriter和  BinaryReader類
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、  //對文字的操作,即讀取與寫入( StreamWriter和 StreamReader)
 public void OperatFile()
        {
            if (ishe==false )
            {
                SaveFileDialog sfd1 = new SaveFileDialog();
                sfd1.InitialDirectory = @"C:\My\Text";
                //設定檔案儲存型別
                sfd1.Filter = "txt檔案|*.txt|所有檔案|*.*";
                //如果使用者沒有輸入副檔名,自動追加字尾
                sfd1.AddExtension = true;
                //設定標題
                sfd1.Title = "file";
                if (sfd1.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = new FileStream(Path.GetFileName(sfd1.FileName), FileMode.Open, FileAccess.ReadWrite);
                    StreamWriter sw = new StreamWriter(fs);
                    sw.Write(textBoxX1.Text,Encoding.Default);
                    sw.Close();
                    fs.Close();

                }
                labelX1.Text = "檔案儲存成功!";
            }
            else
            {
                OpenFileDialog ofd1 = new OpenFileDialog();
                ofd1.Filter = "txt檔案|*.txt|所有檔案|*.*";
                if (ofd1.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = new FileStream(ofd1.FileName, FileMode.Open, FileAccess.ReadWrite);
                    StreamReader sr = new StreamReader(fs, Encoding.Default);

                    s = sr.ReadLine();
                    while (sr.Peek() != -1)
                    {
                        textBoxX1.Text += s;
                        s = sr.ReadLine();
                    }
                    sr.Close();
                    fs.Close();

                }
                labelX1.Text = "開啟檔案:" + ofd1.FileName;
            }
            labelX1.Text = "檔案儲存成功!";
        }

二、  //對圖片的操作,即讀取與寫入(   BinaryWriter和  BinaryReader   )
  public void OperatImage()
        {
            if (ishe == false)
            {
                OpenFileDialog ofd1 = new OpenFileDialog();
                // ofd1.Filter = "bin檔案|*.bin";
                ofd1.Filter = "jpg圖片|*.jpg|gif圖片|*.gif|png圖片|*.png";
                if (ofd1.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = new FileStream(ofd1.FileName, FileMode.Open);
                    BinaryReader br = new BinaryReader(fs);
                    int lenth = Convert.ToInt32(br.BaseStream.Length);

                    bytes = br.ReadBytes(lenth);
                    using (FileStream fs1 = new FileStream(@"G:\My\Picture\text.bin", FileMode.Create))
                    {
                        BinaryWriter bw = new BinaryWriter(fs1);
                        for (int i = 0; i < bytes.Length; i++)
                        {
                            bw.Write(bytes[i]);
                        }
                        bw.Close();
                    }
                    br.Close();
                    fs.Close();
                    MemoryStream ms = new MemoryStream(bytes);
                    //設定圖片框 pictureBox1中的圖片
                    this.pictureBox1.Image = Image.FromStream(ms);
                }

            }
            else
            {
                OpenFileDialog ofd1 = new OpenFileDialog();
                ofd1.Filter = "bin檔案|*.bin";
                // ofd1.Filter = "jpg圖片|*.jpg|gif圖片|*.gif|png圖片|*.png";
                if (ofd1.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = new FileStream(ofd1.FileName, FileMode.Open);
                    BinaryReader br = new BinaryReader(fs);
                    int lenth = Convert.ToInt32(br.BaseStream.Length);
                    bytes = br.ReadBytes(lenth);
                    br.Close();
                    fs.Close();
                    //例項化一個記憶體流--->把從檔案流中讀取的內容[位元組陣列]放到記憶體流中去
                    MemoryStream ms = new MemoryStream(bytes);
                    //設定圖片框 pictureBox1中的圖片
                    this.pictureBox1.Image = Image.FromStream(ms);
                }
                labelX2.Text = "開啟檔案:" + ofd1.FileName;
            }
        }

三、  //對音訊的操作,即讀取與寫入( BinaryWriter和  BinaryReader   )
   public void OperatAudio()
        {
            if (ishe == false)
            {
                OpenFileDialog ofd1 = new OpenFileDialog();
                ofd1.Filter = "mp3音訊|*.mp3|wma音訊|*.wma";
                if (ofd1.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = new FileStream(ofd1.FileName, FileMode.Open);
                    BinaryReader br = new BinaryReader(fs);
                    int lenth = Convert.ToInt32(br.BaseStream.Length);

                    bytes = br.ReadBytes(lenth);
                    using (FileStream fs1 = new FileStream(@"G:\My\Video\text.bin", FileMode.Create))
                    {
                        BinaryWriter bw = new BinaryWriter(fs1);
                        for (int i = 0; i < bytes.Length; i++)
                        {
                            bw.Write(bytes[i]);
                        }
                        bw.Close();
                    }
                    br.Close();
                    fs.Close();
                   
                }

            }
            else
            {
                OpenFileDialog ofd1 = new OpenFileDialog();
                ofd1.Filter = "bin檔案|*.bin";
                if (ofd1.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = new FileStream(ofd1.FileName, FileMode.Open);
                    BinaryReader br = new BinaryReader(fs);
                    FileStream fs1 = new FileStream(@"G:\My\Video\text.mp3", FileMode.Create);
                    BinaryWriter bw = new BinaryWriter(fs1);

                    int lenth = Convert.ToInt32(br.BaseStream.Length);
                    bytes = br.ReadBytes(lenth);
                    bw.Write(bytes);
                    bw.Close();
                    fs1.Close();
                    br.Close();
                    fs.Close();
                }
                labelX2.Text = "開啟檔案:" + ofd1.FileName;
            }

        }