Java의 다양한 파일 스트림 및 네트워크 스트림과 마찬가지로 .net에도 다양한 유형의 스트림이 있습니다. 스트림의 주요 목적은 애플리케이션 외부의 파일 또는 데이터 소스와 상호 작용하는 것입니다. 기본 클래스는 System.IO 네임스페이스에 정의된 Stream입니다. 테스트 파일에 다음과 같이 작성합니다.
다음은 코드입니다. 🎜>
#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을 사용하지 않는 경우에는 폐기하는 것을 잊지 마세요.
2. 루프 및 일괄 복사
다음 코드를 테스트하려면 더 큰 파일을 찾는 것이 좋습니다.
#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); } } #endregionPS: 사용을 권장합니다. 대용량 파일을 업로드하는 원리와 유사하므로 더 과학적입니다.
위는 .net 스트림입니다. 스트림을 사용하여 프로세스 파일 복사된 내용, 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!