• 利用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:UsersAdministratorDesktopsource.avi";
                string target = @"C:UsersAdministratorDesktop	arget.avi";
                CopyFile(source, target);
    View Code
  • 相关阅读:
    css之background与第15周css补充内容叠用
    ios wkwebview didReceiveAuthenticationChallenge crash解决
    ios 版本更新提示-硬更新/软更新
    ios_UITextField-修改占位文字和光标的颜色,大小
    ios_UITextField右侧小圆叉
    ios_中将UITextField输入框设置为密码形式
    系统UISearchController详解
    iOS开发实战之搜索控制器UISearchController使用
    在iOS中如何正确的实现行间距与行高
    iOS alertController自带的输入框
  • 原文地址:https://www.cnblogs.com/-------perfect/p/4196763.html
Copyright © 2020-2023  润新知