文件流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(); } }