利用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[ * * ];
int size = ;
do
{
//返回的size为读取到的实际字节数,可能等于5M,也可能小于5M
size = sfReader.Read(buffer, , buffer.Length);
//最后一个参数是实际字节数,而不是5M。
//如果这里将size换成buffer.Length,当实际字节数不足5M时,会有很空字节填充。
sfWriter.Write(buffer, , size);
}
while (size != ); }//using的作用,所以程序执行到这里时,会自动释放sfWriter的资源,无需手动调用Dispose()
}; }

调用方式

            //利用FileStream实现多媒体文件复制
string source = @"C:\Users\Administrator\Desktop\source.avi";
string target = @"C:\Users\Administrator\Desktop\target.avi";
CopyFile(source, target);

利用FileStream实现多媒体文件复制的更多相关文章

  1. C# 文件流FileStream 实现多媒体文件复制 StreamReader StreamWriter 读取写入文本

    #region 实现多媒体文件的复制 string source = @"F:\123\source.avi";//源文件路径 string target = @"F:\ ...

  2. 2016-9-6 批量给文件名的前面加上“igeek_高薪就业” 2、 利用FileInputStream和FileOutputStream复制文件

    在此只列出典型题目,有的题目扫一眼就有代码的不去浪费时间了,想要完整题目的评论留邮箱,看到就发.持续更新中... 1.批量给文件名的前面加上“igeek_高薪就业” package com.work; ...

  3. FileStream大文件复制

    FileStream缓冲读取和写入可以提高性能.FileStream读取文件的时候,是先讲流放入内存,经Flash()方法后将内存中(缓冲中)的数据写入文件.如果文件非常大,势必消耗性能.特封装在Fi ...

  4. FileStream 操作文件复制

    static void Main(string[] args) { string source = @"D:\c\集合.avi"; string target = @"C ...

  5. 文件读写(三)利用FileStream类操作字节数组byte[]、BinaryFormatter、内存流MemoryStream

    一.Stream类概述 在.NET Framework中,文件和流是有区别的.文件是存储在磁盘上的数据集,它具有名称和相应的路径.当打开一个文件并对其进行读/写时,该文件就称为流(stream).但是 ...

  6. 利用xlutils第三方库复制excel模板

    Python之利用第三方库套用excel模板,模板的样子假设如下: 现在要用这个模板,并且在"第二行第二列"的下方填入内容: #!usr/bin/python3 # -*-codi ...

  7. 利用concat进行数组复制

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 【MYSQL备份】利用mysqldump将一个数据库复制到另一个数据库

    假设要将服务器A上的数据库test备份到服务器B 1.在服务器B上新建数据库cp_test mysql> create database cp_test; Query OK, row affec ...

  9. c#基础语言编程-文件流操作

    引言 在System.IO 命名空间下提供了一系列的类,我们可以通过相应的类进行文件.目录.数据流的操作. 1.File类:提供用于创建.复制.删除.移动和打开文件的静态方法.File类 2.File ...

随机推荐

  1. KnockoutJS 3.X API 第五章 高级应用(2) 控制后代绑定

    注意:这是一种高级技术,通常仅在创建可重用绑定的库时使用. 默认情况下,绑定仅影响它们应用到的元素. 但是如果你想影响所有的后代元素呢? 为此,只需从绑定的init函数中返回{controlsDesc ...

  2. mysql关键字与自己设置的字段冲突

    当我们设置字段大意的使用数据库关键字,会报与数据库有关错误,原因就是字段误与数据库关键字冲突造成. 解决办法:1.修改字段名字. 2.采用数组的方式进行调用.例如:thinkphp3.2手册中orde ...

  3. 使用SQL Server Audit记录数据库变更

        最近工作中有一个需求,就是某一个比较重要的业务表经常被莫名其妙的变更.在SQL Server中这类工作如果不事前捕获记录的话,无法做到.对于捕获变更来说,可以考虑的选择包括Trace,CDC. ...

  4. struts2 OGNL表达式

    一.OGNL OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对 ...

  5. 清空文件下的SVN控制文件

    代码如下,复制代码为txt文件,更改后缀为“.bat”,把文件放到,需要删除的文件的顶端文件夹内,点击执行. @echo on color 2f mode con: cols= lines= @REM ...

  6. [c++] Iterators

    性质depends on various containers. 需要躲过的坑,野指针. int main() { cout << "Hello World!" < ...

  7. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

  8. 索引深入浅出(3/10):聚集索引的B树结构

    在SQL Server里,有2种表是以存储为基础的.有聚集索引的表叫聚集表,没有聚集索引的表叫堆表.在上一篇文章,我们讨论了堆表的特性和存储结构.在这篇文章里,我们来看下聚集表. 有聚集索引的表叫聚集 ...

  9. Go语言接口

    接口是面向对象的必备属性之一,即便是像C语言这种面向过程的语言也可以通过指向函数的指针来实现接口.我们熟知的面向对象语言中更是少不了接口.最近闲了下来,又可以开始学习Go语言了,发现Go语言的接口吸收 ...

  10. 微信小程序官方文档错误整理

    大致看了一遍微信小程序文档,发现有几处微小的错误,但瑕不掩瑜.记录下,以后发现了还会继续在此添加.如果有记录不对的,请及时指出错误. 1.视图层->WXSS->尺寸单位 明显错误,应该为 ...