利用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. 利用SSIS的ForcedExecutionResult 属性 和CheckPoint调试Package

    1,ForcedExecutionResult 强制一个package或task执行的结果,共有四种值 None,Success,Failure,Completion,默认值是None,表示不强制返回 ...

  2. 《BI那点儿事》浅析十三种常用的数据挖掘的技术

    一.前沿 数据挖掘就是从大量的.不完全的.有噪声的.模糊的.随机的数据中,提取隐含在其中的.人们事先不知道的但又是潜在有用的信息和知识的过程.数据挖掘的任务是从数据集中发现模式,可以发现的模式有很多种 ...

  3. 重置Oracle密码

    在系统运行中输入: sqlplus /nolog 在命令窗口分别执行: conn /as sysdba alter user scott identified by tiger; alter user ...

  4. spring源码分析之spring jmx

    JMX架构定义: https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/architecture.html Archi ...

  5. IEE修改最大连接数

    IEE版本:5.1.40 1.查看当前IEE最大连接数(缺省值) mysql> show variables like 'max_connections'; +----------------- ...

  6. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】

    <Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  7. 《HelloGitHub月刊》第03期

    <HelloGithub>第03期 兴趣是最好的老师,而<HelloGitHub> 就是帮你找到兴趣! 因为我比较熟悉python语言,所以月刊中python语言的项目居多,个 ...

  8. MySQL修改默认字符集

    今天朋友在做某个程序项目时,需要修改MySQL修改默认字符集,搞不好找我帮忙.百度了试了好几篇博文中的方法,最后终于成功了.但是感觉那些博文思路有点乱,所以自己总结下,希望可以帮到遇到同样问题的人. ...

  9. 如果根据键盘的frame始终让一个控件始终在键盘的顶部

    我们发现很多时候系统提供的键盘功能有限 有些功能无法实现,所以我们通常的做法就是自定义一个工具条放在键盘的顶部. 那么我们如何知道键盘的frame呢? 这个时候就需要监听键盘发出的通知,在ios中当键 ...

  10. Android布局尺寸思考

    一.初步思考 虽然安卓的这个显示适配的方案有点怪,最初也不容易马上理解,不过这个方案确实有其自己的道理,整个思路是清晰的,方案的也是完整的,没有硬伤 安卓采用的[屏幕密度放缩机制].与web前端对应的 ...