>  기사  >  백엔드 개발  >  .net 스트림 – 스트림을 사용한 파일 복사

.net 스트림 – 스트림을 사용한 파일 복사

黄舟
黄舟원래의
2017-02-24 10:44:081455검색

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);
                }
            }
            #endregion

PS: 사용을 권장합니다. 대용량 파일을 업로드하는 원리와 유사하므로 더 과학적입니다.



위는 .net 스트림입니다. 스트림을 사용하여 프로세스 파일 복사된 내용, 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!








성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.