ホームページ  >  記事  >  バックエンド開発  >  .net ストリーム - ストリームを使用したファイルのコピー

.net ストリーム - ストリームを使用したファイルのコピー

黄舟
黄舟オリジナル
2017-02-24 10:44:081455ブラウズ

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

using は使用しないでください。Dispose を忘れないでください。

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 サイト (www.php.cn) に注目してください。








声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。