FlieStream

using System;
using System.IO;
using System.Text;

namespace _05FileStream
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            //FlieStream  操作字节的

            //读取操作
            //1、创建FileStream对象
            var fs = new FileStream(@"C:\Users\so\Desktop\新建文本文档.txt", FileMode.Open, FileAccess.Read);
            var buffer = new byte[1024];
            //2、fs读取到的东西放到字节数组中(可以限定每次读取多少)如果一次无法满足可以使用循环
            //返回本次实际读取到的有效字节数
            var n = fs.Read(buffer, 0, buffer.Length);
            //3、将字节数组中每一个元素按照制定的编码格式解码成字符串
            var str = Encoding.Default.GetString(buffer, 0, n);
            //4、关闭文件流   释放流占用的资源
            fs.Close();
            fs.Dispose();
            Console.WriteLine(str);
            //*******************************
            //为了避免忘记释放资源,可以使用using
            using ( /*创建FileStream对象整个语句放入*/)
            {
                //........ 
            }
            //*******************************

            //写入操作
            var buffer2 = new byte[1024];
            //1、将字符串编码成字节数组
            buffer2 = Encoding.Default.GetBytes(str);
            //2、创建FileStream对象
            var fw = new FileStream(@"C:\Users\so\Desktop\newnew.txt", FileMode.Create, FileAccess.ReadWrite);
            //3、fw将字节数组写入到文件中(可以限定每次写入多少)
            fw.Write(buffer2, 0, buffer2.Length);
            //4、关闭文件流   释放流占用的资源
            fw.Close();
            fw.Dispose();
            Console.WriteLine("文件创建完成");
            Console.ReadKey();
            //StreamReader  StreamWriter  操作字符的
        }
    }
}

  //同时读取和写入  copy示例  循环读取

public static void CopyFile(string source, string target)
        { 
            using (FileStream fs = new FileStream(source, FileMode.Open, FileAccess.Read))
            {
                using (FileStream fw = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    byte[] buffer = new byte[1024*1024*5];
                    //因为文件可能会比较大,所以我们在读取的时候应该通过一个循环去读取
                    while (true)
                    {
                        //返回本次读取实际读取到的字节数
                        int n = fs.Read(buffer, 0, buffer.Length);
                        //如果返回一个0,也就意味着什么都没有读取到,读取完了
                        if (n == 0) 
                        {
                            break;
                        }
                        fw.Write(buffer, 0, n);
                    }
                }
            }
        }

  

posted @ 2016-07-07 16:09  wipp  阅读(181)  评论(0编辑  收藏  举报