Java のさまざまなファイル ストリームやネットワーク ストリームと同様に、.net にもさまざまな種類のストリームがあります。ストリームの主な目的は、アプリケーションの外部のファイルまたはデータ ソースと対話することです。基本クラスは、名前空間 system.io で定義された stream です。このフローを使用して 1 回限りのコピーを実行します。コード:
#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
II、バッチでバッチで複製します
次のコードをテストするには、次のコードを実行します。より大きなファイルを見つけることをお勧めします。
#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 ストリームの内容です - ストリームを使用してファイルをコピーする 詳細については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。