利用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()
            };

        }

调用方式

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

时间: 2024-11-03 03:25:13

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

使用文件流来实现多媒体文件复制

using System.IO; using UnityEngine; /// <summary> /// 使用文件流来实现多媒体文件复制 /// </summary> public class Text03 : MonoBehaviour { void Start () { //原来路径 string source = @"C:\Users\Administrator.PC-201709211725\Desktop\A01.复习.avi"; //现在路径 st

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

在此只列出典型题目,有的题目扫一眼就有思路的不去浪费时间了,想要完整题目的评论留邮箱,看到就发. 1.批量给文件名的前面加上“igeek_高薪就业” package com.work; import java.io.File; public class Work0906 { public static void main(String[] args) { //1.批量给文件名的前面加上“igeek_高薪就业” String path = "D:/wkexp/extjs"; String

FileStream 操作文件复制

static void Main(string[] args) { string source = @"D:\c\集合.avi"; string target = @"C:\Users\Administrator\Desktop\集合2.avi"; CopyFile(source, target); Console.WriteLine("复制成功"); Console.ReadKey(); } public static void CopyFil

TimesTen 数据库复制学习:6. 利用STORE关键字设定复制网络传输的属性

利用STORE关键字,可以在CREATE ACTIVE STANDBY PAIR, ALTER ACTIVE STANDBY PAIR, CREATE REPLICATION, 和 ALTER REPLICATION 设置复制的属性,如超时,压缩,commit行为,表定义检查,return service,对于classic复制,还可以设置表一级的数据冲突 设定return service的超时 缺省的超时为10秒,可用RETURN WAIT TIME设定超时,例如: Command> ALTE

利用concat进行数组复制

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>数组复制</title> </head> <body> <script type="text/javascript"> var arr1 = [1,3,5,6,7]; var arr2 = arr1.c

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

假设要将服务器A上的数据库test备份到服务器B 1.在服务器B上新建数据库cp_test mysql> create database cp_test; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cp_test | | mysql | | perfor

Java NIO 利用通道完成文件复制(MappedByteBuffer)

相关学习网址: import java.io.IOException;import java.nio.MappedByteBuffer;import java.nio.channels.FileChannel;import java.nio.channels.FileChannel.MapMode;import java.nio.file.Paths;import java.nio.file.StandardOpenOption; import org.junit.Test; @Testpubl

在SharePoint 2010系统中安装RBS FILESTREAM Provider

这两天在研究怎么写一个RBS Provider,可惜文档实在是很缺乏,基本上除了一篇Spec之外,就只有SQL产品组写的一个sample了.之后如果研究有结果,再整理成文章吧,现在先讲讲怎么直接安装并使用RBS FILESTREAM Provider.     -------------- 胡言乱语与正文的分隔线 --------------------     如果使用SharePoint 2007作为文档管理平台,它很让人诟病的一点就是,SharePoint 2007将文件本身直接存储在SQ

C# 文件流 FileStream

  使用FileStream 好处 对内存影响小 读取数据 FileStrame fsRead = new FileStrame(@"C:\a.txt", FileMode.OpenOrCreate, FileAccess.Read);byte[] buffer = new byte[1024*1024*5];//最多读取的大小//返回本次实际读取到的有效字节数int t = fsRaad.Read(buffer, 0 , buffer.Length); //将字节数组中的每一个元素按