利用FileStream實現多媒體文件復制,filestream多媒體
利用FileStream實現多媒體文件復制的主要思路在於利用兩個FileStream對象,一個讀取字節,另一個對象寫入字節既可。
涉及知識點:
1.通常我們操作的File類,FileStream,StreamWriter,StreamReader都是在System.IO命名空間下的。
2.File類和FileStream類操作文件的區別在於,File相當於一次性讀取或寫入整個文件,可能會增加內存負擔,而使用FileStream則可以在讀取或者寫入的時候指定操作的字節數(有點類似於數據庫分頁查詢的效果),從而減輕對內存的開銷。(另File是靜態類,FileStream,StreamWriter,StreamReader則是非靜態類)。
3.FileStream和StreamWriter,StreamReader的區別在於,StreamWriter,StreamReader只能操作文本文件,而FileStream既可以操作文本文件,也可以操作多媒體文件。
4.FileStream,StreamWriter,StreamReader類每次使用完成後,因為GC無法清理他們的所產生的垃圾,所以我們必須手動調用Close(),Dispose()方法。
5.凡是類(或基類)實現IDisposable接口,則我們可以用using語法自動清理他們產生的垃圾,無需調用Close(),Dispose()方法。常見的類如ado.net中的SqlConnection,SqlCommand類和本文中的FileStream,StreamWriter,StreamReader類。
代碼如下

![]()
static void CopyFile(string source, string target)
{
if (!File.Exists(source))
{
throw new Exception("源文件不存在");
}
//創建一個負責讀取的流
using (FileStream sfReader = new FileStream(source, FileMode.Open, FileAccess.Read))
{
//創建一個負責寫入的流
using (FileStream sfWriter = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
{
//每次讀取5M大小
byte[] buffer = new byte[1024 * 1024 * 5];
int size = 0;
do
{
//返回的size為讀取到的實際字節數,可能等於5M,也可能小於5M
size = sfReader.Read(buffer, 0, buffer.Length);
//最後一個參數是實際字節數,而不是5M。
//如果這裡將size換成buffer.Length,當實際字節數不足5M時,會有很空字節填充。
sfWriter.Write(buffer, 0, size);
}
while (size != 0);
}//using的作用,所以程序執行到這裡時,會自動釋放sfWriter的資源,無需手動調用Dispose()
};
}
View Code
調用方式

![]()
//利用FileStream實現多媒體文件復制
string source = @"C:\Users\Administrator\Desktop\source.avi";
string target = @"C:\Users\Administrator\Desktop\target.avi";
CopyFile(source, target);
View Code