//定义源文件和目标文件,绝对路径
public static string source = @"E:\C#\C#编程语言详解.pdf";
//2014-6-10 Training
//拷贝大文件,分块拷贝
AddBigFile(source);
/// <summary>
/// 拷贝大文件
/// </summary>
/// <param name="source">原绝对路径</param>
private static void AddBigFile(string source)
{
int i = ;
using (FileStream fsRead = new FileStream(source, FileMode.Open))
{
byte[] byts = new byte[ * * ];
while (true)
{
int r = fsRead.Read(byts, , byts.Length); if (r <= )
{
Console.WriteLine("----End----");
break;
}
DataBaseController.AddFiles(source, i, byts);
Console.WriteLine("FileName:" + source + "第 " + i + "个" + "大小:" + byts.Length);
i++;
}
}
} DataBaseController.AddFiles函数是拿到二进制数据,插入数据库操作: public static class DataBaseController
{
public static readonly string connstr = "Data Source=.;Initial Catalog=AddFile;Persist Security Info=True;User ID=sa;Password=sa";
public static string Tosource = @"E:\C#\Copy123C#编程语言详解.pdf"; public static void AddFiles(string FileName,int Code,byte[] Data)
{
string sql = @"insert into FileBlock(FileName, Code, Data) values(@FileName, @Code, @Data)";
DateTime time = DateTime.Now;
SqlParameter[] pars = {
new SqlParameter("@FileName",FileName),
new SqlParameter("@Code",Code),
new SqlParameter("@Data",Data) };
int count = SqlHelper.ExecuteNonQuery(connstr, CommandType.Text, sql, pars);
} public static void GetFilesByName(string FileName)
{
string sql = @"select * from FileBlock where FileName = @FileName";
DateTime time = DateTime.Now;
SqlParameter[] pars = {
new SqlParameter("@FileName",FileName),
};
List<FileBlock> list = new List<FileBlock>();
using (SqlDataReader reader = SqlHelper.ExecuteReader(connstr, CommandType.Text, sql, pars))
{
list = Application.Data2Objects<FileBlock>(reader);
} //循环查出文件的多个块,拼接写在一个文件中
FileStream fs = new FileStream(Tosource,FileMode.Create);
foreach (var item in list)
{
fs.Write(item.Data,,item.Data.Length);
} //byte[] data = new byte[fs.Length];
//fs.Read(data,0,fs.Length);
//fs.Seek(0,SeekOrigin.Begin);
// return data;
}
} public class FileBlock
{
public int ID { get; set; }
public string FileName { get; set; }
public int Code { get; set; }
public byte[] Data { get; set; }
}

C#分块拷贝大文件的更多相关文章

  1. .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化

    1.集合(1)ArrayList内部存储数据的是一个object数组,创建这个类的对象的时候,这个对象里的数组的长度为0(2)调用Add方法加元素的时候,如果第一次增加元神,就会将数组的长度变为4往里 ...

  2. DELL R730 服务器拷贝大文件

    从服务器上拷贝大文件,通过USB拷贝,写入速度很慢,而且拷贝到100多G的时候直接卡死. 原因:服务器的USB是2.0,传输速率很慢. 解决方法: 找一台笔记本,USB 接口是3.0的,通过网络共享传 ...

  3. VB断点拷贝大文件(WIN7系统需要更改某个API函数,具体我也忘了)

    小弟以前租碟在电脑上看VCD,有时候拷贝经典的影片到硬盘上可惜碰到比较粗糙的碟子就很难拷贝过去,因此编了个断点拷贝文件的程序.本程序用于拷贝大文件,并可在旧文件上接着拷贝本程序能在无法读取数据的情况下 ...

  4. 【HDFS API编程】从本地拷贝文件,从本地拷贝大文件,拷贝HDFS文件到本地

    接着之前继续API操作的学习 CopyFromLocalFile: 顾名思义,从本地文件拷贝 /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)create Configur ...

  5. U盘拷贝大文件提示文件过大无法拷贝解决方案

    工具: 计算机 windows操作系统 U盘 原因:由于U盘的格式问题导致的,当期的磁盘格式是FAT32类型的,无拷贝过大的文件 方法:接下来修改U盘类型,且不格式化U盘 1.键盘win+R快捷键弹出 ...

  6. 批处理学习笔记12 - 拷贝大文件到特定目录 Copy命令

    ~z 获取文件容量大小,配合变量使用 copy 拷贝命令, copy 原地址 新地址 ok,下面上代码 @echo off setlocal enabledelayedexpansion for %% ...

  7. Node.js中使用pipe拷贝大文件不能完全拷贝的解决办法

    原来的代码如下: var readable = fs.createReadStream( filepath ); var writable = fs.createWriteStream( outFil ...

  8. shell脚本实现拷贝大文件显示百分比的代码分享

    #!/bin/sh strace -q -eread cp -- "${1}" "${2}" 2>&1 \| awk '{    count += ...

  9. nodejs pipe实现大文件拷贝

    原文: http://nqdeng.github.io/7-days-nodejs/ --------------------------------------------------------- ...

随机推荐

  1. myclipse运行web的一些问题

    一.修改项目访问路径 项目右键>properties(属性)>输入web搜索>双击web>修改Web-Content root内容即可 二. myeclipse中web项目不自 ...

  2. 阿里maven镜像配置

    setting.xml<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven< ...

  3. JS对DOM节点操作整理

    获取节点: //按照ID获取 document.getElementById('element'); //按照节点名称获取,返回类数组对象 document.getElementsByTagName( ...

  4. spring框架详细课程视频

    https://ke.qq.com/course/27346#term_id=100012852

  5. 008 String to Integer (atoi) 字符串转换为整数

    详见:https://leetcode.com/problems/string-to-integer-atoi/description/ 实现语言:Java class Solution { publ ...

  6. JVM基础知识2 垃圾收集器与内存分配策略

    如何判断堆中的哪些对象可以被回收 主流的程序语言都是使用根搜索算法(GC Roots Tracing)判定对象是否存活 基本思路是:通过一系列名为“GC Roots”的对象作为起点,从这些节点开始向下 ...

  7. settings.xml样例文件

    localRepository G:\program-my\maven-responsery true --> false --> com.your.plugins --> prox ...

  8. Oracle存储函数jdbc调用

    package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...

  9. Arduino连接SHT10温湿度传感器--返回值不正常解决办法

    如题目,arduino中连接温湿度传感器,用的是一个github开源项目,地址:点击打开,其实这个就是一个封装好的库,下载后把解压的文件夹复制到Arduino目录下的librarys文件夹内,重启Ar ...

  10. SpringMVC 返回自定义属性名

    SpringMVC 返回的属性名默认是小写驼峰形式的实体对象中的属性名,如 userID 属性名它会返回 userId. 如果接口方式之前已经定下来,这样前端按原来的方式取数据会读取失败的,那有没有方 ...