打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VA18.2 数据流概述

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 VA18.__数据流概述

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {       

            //Stream 所有流的父类

            //FileStream fs = File.Open();        //返回 FileStream

            //FileStream fs = File.OpenRead();     //返回只读的FileStream

            //FileStream fs = File.OpenWrite();      //返回只写的FileStream

            //FileStream fs = new FileStream(参数);  //返回 FileStream

        }

        #region 1.FileStream数据流读取

        /// <summary>

        /// 1.FileStream数据流读取

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnFileStreamRead_Click(object sender, EventArgs e)

        {

            //1将string转byte数组转换为一个字符串 

            string msg = "将一字符串转为byte数组";

            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg);

            string newmsg = System.Text.Encoding.UTF8.GetString(bytes);

            //第一种方法读取

           // 2通过FileStream来读文件

           //创建文件流

            using (FileStream fsRead = new FileStream(@"D:\桌面文件\新建文本文档.txt", FileMode.OpenOrCreate, FileAccess.Read))

            {

                byte[] bytsRead = new byte[fsRead.Length];

                //读取文件   fsRead.Length 小文件可以指定文件总字节 读取到bytsRead数据中

                fsRead.Read(bytsRead, 0, bytsRead.Length);

                //将bytsRead数组转换为字符串

                string msgRead = System.Text.Encoding.UTF8.GetString(bytsRead);

            }

            //第二种方法读取

            //文件流的使用步骤

            string sql = "" ;

            byte[] bufferByte = new byte[100];

            char[] buffchar = new char[100];

            //1.创建文件流 

            FileStream fsReadWrite = new FileStream(@"D:\桌面文件\新建文本文档.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);

            //2.使用文件,执行读操作

            fsReadWrite.Seek(0, SeekOrigin.Begin);   //从开始位置读取

            fsReadWrite.Read(bufferByte, 0, 100);    //读取文件字节

            Decoder dc = Encoding.UTF8.GetDecoder(); //解码

            dc.GetChars(bufferByte, 0, bufferByte.Length, buffchar, 0);

            foreach (char str in buffchar)

            {

                 sql += str;

            }

            fsReadWrite.Dispose();

            MessageBox.Show("读取" + sql.ToString());

        }

        #endregion

        #region 2.FileStream数据流写入

        /// <summary>

        /// 2.FileStream数据流写入

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnFileStreamWrite_Click(object sender, EventArgs e)

        {

            //第一种方法写入

            // 1通过FileStream来写文件

            //1.创建文件流

            FileStream fsWrite1 = new FileStream(@"D:\桌面文件\新建文本文档.txt", FileMode.Create, FileAccess.Write);

            //2.使用文件流,执行读写操作

            string msgf = "今天下雨了!";

            byte[] bytsWrite = System.Text.Encoding.UTF8.GetBytes(msgf);

            //写入 参数1:表示将指定的字节数组中的内容写入文件 参数2:参数的数组的偏移量,一般为0 参数3:本次文件写入操作要写入的实际的字节个数

            fsWrite1.Write(bytsWrite, 0, bytsWrite.Length);

            //3.清空缓冲区 关闭文件流 释放资源     fsWrite.Flush(); fsWrite.Close();   可不写 Dispose会向上调用

            fsWrite1.Dispose();

            //第二种方法写入

            try

            {

                FileStream fsWrite = new FileStream(@"D:\桌面文件\新建文本文档.txt", FileMode.OpenOrCreate, FileAccess.Write);

                //写入

                char[] buffchar = new char[100];

                byte[] bufferByte = new byte[100];

                buffchar = "写入文字".ToCharArray();

                Encoder en = Encoding.UTF8.GetEncoder();

                en.GetBytes(buffchar, 0, buffchar.Length, bufferByte, 0, true);

                fsWrite.Seek(fsWrite.Length, SeekOrigin.Begin);   //从开始位置读取

                fsWrite.Write(bufferByte, 0, bufferByte.Length);

                fsWrite.Close();

                fsWrite.Dispose();

            }

            catch (Exception ex)

            {

                MessageBox.Show("发生异常,原因:" + ex.ToString());

            }

        }

        #endregion

        #region 3.数据流大文件拷贝

        /// <summary>

        /// 数据流大文件拷贝

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnFileStreamCopy_Click(object sender, EventArgs e)

        {

            string source = @"D:\桌面文件\9.大文件拷贝.avi";

            string target = @"D:\桌面文件\拷贝.avi";

            BigFileCopy(source, target);

        }

        /// <summary>

        /// 通过文件流实现将source中的文件拷贝到target

        /// </summary>

        /// <param name="source"></param>

        /// <param name="target"></param>

        private void BigFileCopy(string source, string target)

        {

            //1 创建一个读取源文件的流

            using (FileStream fsRead = new FileStream(source, FileMode.Open, FileAccess.Read))

            {

                //2 创建一个写入新文件的文件流

                using (FileStream fsWrit = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))

                {

                    //拷贝文件的时候,创建的一个中间缓冲区5MB

                    byte[] bytes = new byte[1024 * 1024 * 5];

                    //返回值表示本次实际读取到的字节个数

                    //把filestream的对象看作是一个 临时的文件内容存储区,

                    //而自定义的 byte数组则是我们的数据仓库,

                    //那么,每次filestream执行一次read之后,被read到的内容可以简单看作是  剪切并粘贴到了  我们自定义的byte数组中。

                    int r = 0;

                    while ((r = fsRead.Read(bytes, 0, bytes.Length)) > 0)

                    {

                        //将读取到的内容写入到新文件中

                        fsWrit.Write(bytes, 0, r);

                        //拷贝进度百分比

                        double d = (fsWrit.Position / (double)fsRead.Length) * 100;

                    }

                }

            }

        }

        #endregion

        //1根据基础数据或存储库 流可能只支持这些功能中的一部分

        //2用户通过使用 CanRead CanWrite 和 CanSeek 属性  可实现应用程序查询流的功能

        //Read 和 Write 方法读写各种不同格式的数据 对于支持查找的流 使用Seek  和 SetLegth方法及 Position 和Length 属性

        //可以查询和修改流的当前位置 和长度

        //Push  清除内部缓存区 并确保将所有数据写入基础源或存储库

        //Close 也会释放操作系统资源

        //BufferedStream 类提供了将一个经过缓冲的流环另一个流功能 ,以便提高读写性能

        //在实现Stream的派生类时,必须提供Read 和 Write 方法的实现

        //异步方法对 BeginRead EndRead BeginWrite 和  EndWrite 通过同步方法Read 和 Write实现 

        //同样 Read 和 write 的实现已将与异步方法一起正常工作

        //readByte 和 WriteByte 的默认实现创建一个新的单元素字节数组

        //然后调用Read 和 Write 的实现, 从Stream 派生时 如果有内部缓冲区,这样性能将得到提供

        //CanRead CanSeek CanWrite flush  length position seek  setLength 不要重写Close 方法,

        //而将所有流清理逻辑放入 Dispose方法

         //C# 语言中提供的主要数据流有 NetWorkStream 网路流  BufferedStream 缓冲区流  MemonryStream 内在流

        //FileStream 文件流 CryptoStream 加密流 等 .

        //StreamWrite类 

        //StreamWrite sw=new StreamWriter(string path,bool append);

        //bool append    false 表示产创建一个新文件或现有文件并将其打开 true 标示打开文件,保留原来的数据

        //常用的方法

        //Close 关闭当前StreamWrite对象和基础流

        //Dispose 释放使用的资源

        //Flush 清理当前编写器的所有缓冲区 并使所有缓冲数据写入基础流

        //Write 写入流

        //WriteLine 写入指定的某些数据 后跟行结束符

        //创建方法2种 

        //1.先创建FileStream 类 再创建StreamReader 类

        //FileStream fs=new FileStream (string Path,FileMode mode);

        //StreamReader sr=new StreamReader (fs);

        ////2.直接创建StreamReader 类

        //StreamReader sr=new StreamReader (stirng  path);

        //Close  

        //Dispose 

        //Peek  返回下个可用字符

        //Read 读取输入流中的下一个字符或下组字符

        //readLine  从数据流中亣

        /// <summary>

        /// 4.StreamReader大文本读取 逐行读取文本文件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnTxtStreamReader_Click(object sender, EventArgs e)

        {

            if (File.Exists(@"D:\桌面文件\新建文本文档.txt"))

            {

                //using() 自动帮我们释放流所占用的空间

                using (StreamReader sr = new StreamReader(@"D:\桌面文件\新建文本文档.txt",Encoding.Default ))

                {

                    string line = null;

                    while ((line = sr.ReadLine() ) != null)

                    {

                        MessageBox.Show(line.ToString());

                    }

                }

            }

            else

            {

                MessageBox.Show("文件不存在");

            }

        }

        /// <summary>

        /// 5.StreamReader大文本写入

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnTxtStreamWriter_Click(object sender, EventArgs e)

        {

            //操作文件路径

            string path = @"D:\桌面文件\新建文本文档.txt";

            try

            {

                //第一种方式

                //FileStream fs = new FileStream(path, FileMode.OpenOrCreate);

                //StreamWriter sw = new StreamWriter(fs);

                //第二种方式

                //false 表示产生创建一个新文件或现有文件并将其打开

                //true 表示打开 保留原本数据

                string mystr = "写入一行文字";

                using (   StreamWriter sw = new StreamWriter(path, true,Encoding.Default )){

                    sw.WriteLine(mystr);

                }

                MessageBox.Show("写入完成!");

            }

            catch (Exception ex)

            {

                MessageBox.Show("发生异常,原因:" + ex.ToString());

            }

        }

        //文件选择之OpenFileDialog控件

        private void button5_Click(object sender, EventArgs e)

        {

                openFileDialog1.InitialDirectory = @"D:\桌面文件\source";

                //文件过滤

                openFileDialog1.Filter = "文本文件(*.txt)|*.txt|*.wmv"; 

                openFileDialog1.FilterIndex = 3;

                openFileDialog1.Title = "OpenFileDialog控件";         //默认标题

                openFileDialog1.FileName = "文件名称";                     //默认文件

                openFileDialog1.ShowHelp = true;

                if (openFileDialog1.ShowDialog() == DialogResult.OK) {

                        textBox1.Text = "";

                        // 获取文件名

                        string fName = openFileDialog1.FileName;

                        string fileCon = "";

                        StreamReader sr = new StreamReader(fName, System.Text.Encoding.GetEncoding("gb2312"));

                        while ((fileCon = sr.ReadLine()) != null)

                        { textBox1.Text += fileCon+"\r\n";

                        }

                        sr.Close ();

                }

        }

        //文件保存 saveFileDialog

        private void button6_Click(object sender, EventArgs e)

        {

                saveFileDialog1.InitialDirectory = @"D:\桌面文件\source";

                saveFileDialog1.Filter = " 97-2003Word文档(*.doc)|*.doc)|文本文件(*.txt)|*.txt";

                saveFileDialog1.FilterIndex = 2;

                saveFileDialog1.FileName = "51zxw.txt";

                //Convert.ToString(DateTime.Now.Ticks); 

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

                {

                    string fName = saveFileDialog1.FileName;

                    FileStream  fs = File.Open(fName ,FileMode.Create);     //可追加

                    StreamWriter sw = new StreamWriter(fs);

                    sw.WriteLine(textBox1.Text  );

                    sw.Close();

                    fs.Close();

                }

        }

        private void textBox1_TextChanged(object sender, EventArgs e)

        {

        }

        //文件夹选择之FolderBrowserDialog控件   添加 TXT文件

        private void button7_Click(object sender, EventArgs e)

        {

            folderBrowserDialog1.Description = "请选择一个包含TXT格式的文件夹";   

            folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Desktop;

            folderBrowserDialog1.ShowNewFolderButton = false;

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

            {

                string fileName = folderBrowserDialog1.SelectedPath;   //用户选择的路径

                string[] Files = Directory.GetFiles(fileName );        // 获取目标下的子文件

                foreach (string str in Files) {

                    int i = str.LastIndexOf('.');

                    string  s = str.Substring(str.LastIndexOf('.') + 1).ToLower();

                    if (str.Substring(str.LastIndexOf('.') + 1).ToLower() == "txt") {

                        string filename = System.IO.Path.GetFileName(str);//文件名  “Default.aspx”

                        string extension = System.IO.Path.GetExtension(str);//扩展名 “.aspx”

                        string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(str);// 没有扩展名的文件名 “Default”

                        textBox1.AppendText(filename + "\r\n");

                        textBox1.AppendText(str+"\r\n");

                    }

                }

            }

        }

        private void button8_Click(object sender, EventArgs e)

        {

            folderBrowserDialog1.Description = "请选择一个包含TXT格式的文件夹";

            folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Desktop;

            folderBrowserDialog1.ShowNewFolderButton = false;

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

            {

                string fileName = folderBrowserDialog1.SelectedPath;   //用户选择的路径

                string[] Files = Directory.GetFiles(fileName);        // 获取目标下的子文件

                foreach (string str in Files)

                {

                    int i = str.LastIndexOf('.');

                    string s = str.Substring(str.LastIndexOf('.') + 1).ToLower();

                    if (str.Substring(str.LastIndexOf('.') + 1).ToLower() == "docx")

                    {

                        textBox1.AppendText(str + "\r\n");

                    }

                }

            }

        }

        private void button10_Click(object sender, EventArgs e)

        {

        }

    }

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c#根据文件大小显示文件复制进度条实例
winform下用FileStream实现多文件上传
C# Byte[]数组读取和写入文件
C# 文件与字符串的互转
WEB页获取串口数据
C# 导出pdf(浏览器不预览直接下载)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服