文件流和二进制流操作

FileStream
• FileStream 对于在文件系统上读取和写入文件非常有用, FileStream 缓存输入和输出,以获得更好的性能。
• FileStream 类能够以同步或异步这两种模式之一打开文件,而且对同步方法(Read 和 Write)和异步方法(BeginRead 和BeginWrite)有显著的性能影响。
• 在Windows系统中,如果输入输出数据小于64KB,则采用同步模式性能较好;而当大于64KB时,则最好采用异步模式

FileSteam常用属性和方法
• CanRead:判断当前流是否支持读取。
• CanWrite:判断当前流是否支持写入。
• CanSeek:是否支持搜索。
• IsAsync:是否处于异步打开模式
• Postion:设置获取当前流所处位置
• Flush:将当前缓存区的数据写入文件
• Lock:锁定流,防止其他文件访问。
• Seek:设置当前流操作的指针位置

效果图:

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace FileSteamOp
{
    public partial class Form1 : Form
    {
        private string strFileName = "";
        public Form1()
        {
            InitializeComponent();
        }

        private void btnCreateText_Click(object sender, EventArgs e)
        {
            FileStream fs = new FileStream("c://FileStreamCreateText.txt", FileMode.Create, FileAccess.Write);
            //建立StreamWriter为写做准备
            StreamWriter rw = new StreamWriter(fs, Encoding.Default);
            //使用WriteLine写入内容
            rw.WriteLine("曾经有一份真挚的爱情放在我的面前。");
            rw.WriteLine("而我没有珍惜,当我失去的时候,我才追悔莫及。");
            rw.WriteLine("人世间最大的痛苦莫过于此,如果上天给我一个再来一次的机会。");
            rw.WriteLine("我会对那个女孩说三个字:/"我爱你。/"");
            rw.WriteLine("如果非要在这份爱上加一个期限的话,我希望是一万年。");
            //将缓冲区的内容写入文件
            rw.Flush();
            //关闭rw对象
            rw.Close();
            fs.Close();

            fs = new FileStream("c://FileStreamCreateText.txt", FileMode.Open, FileAccess.Read);
            //打开文本文件
            StreamReader sr = new StreamReader(fs, Encoding.Default);
            StringBuilder output = new StringBuilder();
            string rl;
            while ((rl = sr.ReadLine()) != null)
            {
                output.Append(rl + "/r/n");
            }
            tbMessage.Text = output.ToString();
            sr.Close();
            fs.Close();
        }

        private void btnOpenText_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "文本文件|*.txt";
            dlg.InitialDirectory = "c://";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                FileStream fs = new FileStream(dlg.FileName , FileMode.Open, FileAccess.Read);
                StreamReader sr = new StreamReader(fs, Encoding.Default);
                StringBuilder output = new StringBuilder();
                string rl;
                while ((rl = sr.ReadLine()) != null)
                {
                    output.Append(rl + "/r/n");
                }
                sr.Close();
                fs.Close();
                tbMessage.Text = output.ToString();
            }

        }

        private void btnCopy_Click(object sender, EventArgs e)
        {
              FolderBrowserDialog dlg = new FolderBrowserDialog();
              if (dlg.ShowDialog() == DialogResult.OK)
              {
                  if (MessageBox.Show("确认复制吗?", "确认对话框", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
                      == DialogResult.Yes)
                  {
                      try
                      {
                          string OriginFile = strFileName;
                          string NewFile = dlg.SelectedPath + "//"+Path.GetFileName(strFileName );

                          //下面开始操作

                          //建立两个FileStream对象
                          FileStream fsOF = new FileStream(OriginFile, FileMode.Open, FileAccess.Read);
                          FileStream fsNF = new FileStream(NewFile, FileMode.Create, FileAccess.Write);

                          //建立分别建立一个读写类
                          BinaryReader br = new BinaryReader(fsOF);
                          BinaryWriter bw = new BinaryWriter(fsNF);

                          //将读取文件流指针指向流的头部
                          br.BaseStream.Seek(0, SeekOrigin.Begin);
                          //将写入文件流指针指向流的尾部
                          bw.BaseStream.Seek(0, SeekOrigin.End);

                          while (br.BaseStream.Position < br.BaseStream.Length)
                          {
                              //从br流中读取一个Byte并马上写入bw流
                              bw.Write(br.ReadByte());
                          }

                          br.Close();
                          bw.Close();
                          //操作后判断源文件是否存在

                          if (File.Exists(NewFile))
                              tbMessage.Text = "附件复制成功!/r/n";
                          else
                              tbMessage.Text = "附件复制失败!/r/n";
                      }
                      catch (Exception ex)
                      {
                          tbMessage.Text = "发生错误:" + ex.Message;
                      }
                         
                  }
              }
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "所有文件|*.*";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                strFileName = dlg.FileName;
                tbResFile.Text = strFileName;
                FileInfo fi = new FileInfo(strFileName);
                tbMessage.Text = "源文件为:" + fi.Name + ",创建时间为:" + fi.CreationTime.ToString()
                               + ",大小为:" + fi.Length.ToString() + "/r/n";
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值