一,运用流举行一次性的复制写入
起首我们在桌面上建个测试用的文件,写入些东西:
以后是我们的代码:
#region 运用流举行一次性复制 //建立一个文件流对象(参数一:指定了文件的位置;参数二:罗列值,指定操作系统翻开文件的体式格局;参数三:表清楚明了翻开文件的企图;注重第二个参数与第三个参数要注重搭配运用) Stream source = new FileStream(@"C:/Users/v-liuhch/Desktop/StreamTest.txt", FileMode.Open, FileAccess.Read); byte[] buffer = new byte[source.Length]; //将文件数据写入到字节数组中(参数一:要写入的字节数组; 参数二:用于设定文件从哪一个位置最先读取;参数三:读取的字节数) int byteRead = source.Read(buffer, 0, (int)source.Length);//返回值为读取到的字节数 //foreach (var b in buffer) //{ // // Console.WriteLine(Convert.ToString(b, 2));//二进制 // //Console.WriteLine(Convert.ToString(b, 10));//十进制 // Console.WriteLine(Convert.ToString(b, 16).ToUpper());//十六进制 //} //Console.ReadKey(); //将文件写入StreamTarget.txt using (Stream target = new FileStream(@"C:/Users/v-liuhch/Desktop/StreamTarget.txt", FileMode.Create, FileAccess.Write)) { target.Write(buffer, 0, buffer.Length); } source.Dispose(); #endregion
注重假如不运用using,别忘了dispose.
二,轮回分批的复制
为了测试下面这段代码,发起找个大点儿的文件啥滴。
#region 轮回分批复制 /*题目涌现背景: 通报一个更大的文件; * 事前没法得知文件的大小,比方读取收集文件; * 上述情况不能建立一个尺寸恰好适宜的byte[]数组,此时只能分批读取和写入,每次只读取部份字节,直到文件尾部; */ int BufferSize = 10240;//10KB using ( Stream source = new FileStream(@"C:/Users/v-liuhch/Desktop/sherlock.wmv", FileMode.Open, FileAccess.Read)) { using (Stream target = new FileStream(@"C:/Users/v-liuhch/Desktop/sherlockCopy.wmv", FileMode.Create, FileAccess.Write)) { byte[] buffer = new byte[BufferSize]; int bytesRead; do { bytesRead = source.Read(buffer, 0, BufferSize); target.Write(buffer, 0, bytesRead); } while (bytesRead > 0); } } #endregion
PS:发起运用using;
对大文件采用支解读取的体式格局照样比较科学滴,相似大文件上传的道理。
以上就是.net 流——运用流举行文件复制的内容,更多相关内容请关注ki4网(www.ki4.cn)!