文件流FileStream

文件流FileStream

文件流其实就是字节流.

■Read方法和Write方法

■构造方法的参数列表:

  第一个为要读取或要写入的文件路径.

  第二个为FileMode:Open,Creat,CreatOrOpen,Append,Truncate.

  第三个为FileAccess:write,Read,ReadWrite

class Program
    {
        static void Main(string[] args)
        {
            FileStream f = new FileStream(@"D:1.txt", FileMode.Open, FileAccess.Read);
            FileStream f2 = new FileStream(@"D:写进来的.txt", FileMode.Create, FileAccess.Write);
            byte[] bs = new byte[10];
            using (f)
            {
                using (f2)
                {
                    int num;
                    do 
                    {
                       num = f.Read(bs, 0, bs.Length);
                       //f2.Write(bs, 0, bs.Length);某些情况会和容易出现错误
                       f2.Write(bs, 0, num);
                    } while (num!=0);
                }
            }
        }
    }

代码中,和f2.Write(bs,0,bs.Length)会有出错的情况:

例子:

 文件1.txt里面的内容为"翟 群"

下面我们对1.txt进行复制,见代码:

FileStream f1=new FileStream("D:\1.txt",FileMode.Open,FileAccess.Read);
FileStream f2=new FileStream("D:\1.txt",FileMode.Open,FileAccess.Write);
using(f1){
    using(f2){
        byte[] bs=new byte[4];
        int mun;
        do{
         num=f1.Read(bs,0,bs.Length);
         f2.Write(bs,0,bs.Length);
        }while(num!=0) 
    }
}

 所以产生乱码:

正确是读写图解:

文件加密:

class Program
    {
        static void Main(string[] args)
        {
            FileStream f = new FileStream("d:\1.txt", FileMode.Open, FileAccess.Read);
            FileStream f1 = new FileStream("d:\加密文件", FileMode.Create, FileAccess.Write);
            using (f)
            {
                using (f1)
                {
                    byte[] bs = new byte[10];
                    int num;
                    do 
                    {
                        //有一个字节流,我们将字节流原封不动的写进入新文件,则表示copy
                        //如果要加密,需要一个秘钥,咱就把它设为1.在每一个字节数上加1
                        num = f.Read(bs, 0, bs.Length);
                        for (int i = 0; i < bs.Length;i++ )//进行加密
                        {
                            //bs[i]=(byte)(bs[i]+1);
                            bs[i]++;
                        }
                        f1.Write(bs, 0, num);
                    } while (num!=0);
                }
            }
            FileStream f2 = new FileStream("D:\加密文件", FileMode.Open, FileAccess.Read);
            FileStream f3 = new FileStream("D:\解密文件", FileMode.Create, FileAccess.Write);
            using (f2)
            {
                using (f3)
                {
                    byte[] b=new byte[10];
                    int count;
                    do
                    {
                        count = f2.Read(b, 0, b.Length);
                        for (int i = 0; i < b.Length;i++ )
                        {
                            b[i]--;//因为加密的时候对每个字节加了1,所以解密就是将每个字节减去1就得到了原来的数据
                        }
                        f3.Write(b, 0, count);
                    } while (count!=0);
                }
            }
        }
    }

 ■ReadByte()和WriteByte()方法。返回读取到的二进制数据对应的Ascil码。

下面代码用ReadByte()和WriteByte()方法来实现文件加密,解密

 static void Main(string[] args)
        {
            Console.WriteLine("请输入要加密的文件");
            string file = Console.ReadLine();
            //File.Exist()判断文件是否存在,如果存在返回true,否则返回false
            if (!System.IO.File.Exists(file))
            {
                Console.WriteLine("输入的文件不存在");
                Console.ReadKey();
                return;//程序结束
            }
            //要进行加密,可以考虑生成一个新文件,名字相同,加上后缀
            //D:1.txt ->D:1_加密.txt
            string newfile = file.Insert(file.LastIndexOf('.'), "_加密");
            FileStream fileReader = new FileStream(file, FileMode.Open, FileAccess.Read);
            FileStream fileWriter = new FileStream(newfile, FileMode.Create, FileAccess.Write);
            using (fileReader)
            {
                using (fileWriter)
                {
                    int res = -1;
                    while ((res = fileReader.ReadByte()) != -1)//ReadByte()返回读到的二进制数据对应的Ascil码
                    {
                        res = 255 - res;
                        fileWriter.WriteByte((byte)res);
                    }
                }
                Console.WriteLine("ok");
                Console.WriteLine("按任意键盘解密");
                Console.ReadKey();
                string newfile1 = file.Insert(file.LastIndexOf('.'), "_解密");
                FileStream fr = new FileStream(newfile, FileMode.Open, FileAccess.Read);
                FileStream fw = new FileStream(newfile1, FileMode.Create, FileAccess.Write);
                using (fr)
                {
                    using (fw)
                    {
                        int res = -1;
                        while ((res = fr.ReadByte())!= -1)
                        {
                            res = 255 - res;
                            fw.WriteByte((byte)res);
                        }
                    }
                }
                Console.WriteLine("ok");
                Console.ReadKey();
            }


        }
View Code
原文地址:https://www.cnblogs.com/tobecabbage/p/3491159.html