.net 流——使用流進行檔案複製

來源:互聯網
上載者:User
與Java中的各種檔案流,網路流類似,.net中也有各類流。流的主要用途就是與應用程式外部的檔案或資料來源進行資料互動。基類為Stream,定義在命名空間System.IO下;

一,使用流進行一次性的複製寫入

首先我們在案頭上建個測試用的檔案,寫入些東西:

之後是我們的代碼:

#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 流——使用流進行檔案複製的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!






  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.