C#文件断点续传实现方法
作者:我心依旧 发布时间:2023-09-07 18:35:05
标签:C#,文件,断点续传
本文实例讲述了C#文件断点续传实现方法。分享给大家供大家参考。具体实现方法如下:
/// <summary>
/// 下载局域网文件
/// </summary>
/// <param name="path">文件路径,如:\\192.168.10.1\app\app\123.zip</param>
/// <param name="username">计算机名称</param>
/// <param name="password">计算机密码</param>
static void RequestWindowsShared(string path, string username, string password)
{
//文件总大小
int allBytesCount = 0;
//每次传输大小
int byteTemp = 1024;
//当前位置
int bytePosition = 0;
//剩下大小
int remain = 0;
System.Net.FileWebRequest request = null;
System.Net.FileWebResponse response = null;
System.IO.Stream stream = null;
System.IO.FileStream fileStream = null;
try
{
Uri uri = new Uri(path);
request = (System.Net.FileWebRequest)System.Net.FileWebRequest.Create(uri);
System.Net.ICredentials ic = new System.Net.NetworkCredential(username, password);
request.Credentials = ic;
response = (System.Net.FileWebResponse)request.GetResponse();
stream = response.GetResponseStream();
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
string filename = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + System.IO.Path.GetFileName(path);
fileStream = new FileStream(filename, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite);
allBytesCount = bytes.Length;
remain = allBytesCount;
while (remain > 0)
{
fileStream.Write(bytes, bytePosition, byteTemp);
remain = remain - byteTemp;
bytePosition = bytePosition + byteTemp;
fileStream.Flush();
if (remain < byteTemp)
byteTemp = remain;
}
Console.WriteLine("下载成功!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
fileStream.Close();
fileStream.Dispose();
stream.Close();
stream.Dispose();
}
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="path">共享目录路径+文件名称</param>
/// <param name="local">本地路径</param>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
static void ResponseWindowsShared(string path, string local, string username, string password)
{
//文件总大小
int allBytesCount = 0;
//每次传输大小
int byteTemp = 1024;
//当前位置
int bytePosition = 0;
//剩下大小
int remain = 0;
System.Net.FileWebRequest request = null;
System.IO.Stream stream = null;
try
{
//时间戳
string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
Uri uri = new Uri(path);
byte[] bytes = System.IO.File.ReadAllBytes(local);
request = (System.Net.FileWebRequest)System.Net.FileWebRequest.Create(uri);
request.Method = "POST";
//设置获得响应的超时时间(300秒)
request.Timeout = 300000;
request.ContentType = "multipart/form-data; boundary=" + strBoundary;
request.ContentLength = bytes.Length;
System.Net.ICredentials ic = new System.Net.NetworkCredential(username, password);
request.Credentials = ic;
stream = request.GetRequestStream();
allBytesCount = bytes.Length;
remain = allBytesCount;
while (remain > 0)
{
stream.Write(bytes, bytePosition, byteTemp);
remain = remain - byteTemp;
bytePosition = bytePosition + byteTemp;
stream.Flush();
if (remain < byteTemp)
byteTemp = remain;
}
Console.WriteLine("上传成功!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
stream.Close();
stream.Dispose();
}
}
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 一般入参我们都会转为vo对象。那么直接在对象的属性上注解即可。 其实spring用的是hibernate的validator.步骤1.配置s
- 在一些场合,我们往往需要使用印章来给每页文档加盖一个印章,以表示该文档经过某个部门的认证的,常规的做法就是打印文档后盖章,如果需要电子档再行
- 目录UI组件封装的考虑要点文本输入框接口定义代码实现组件使用踩坑记录总结UI组件封装的考虑要点封装一个 UI 组件,通常需要考虑下面这三个点
- Java 判断字符串中是否包含中文的实例详解 Java判断一个字符串是否有中文是利用Unicode编码来判断,因为中
- 废话不多说了,给大家贴关键代码了,具体代码如下所示:import java.io.File;import java.io.FileOutpu
- 一、Spring能做什么?Spring的主要目的是使J2EE易用和促进好编程习惯。倒置控制容器 Spring的设计核心是 org.sprin
- 汇总:1. 冒泡排序每轮循环确定最值;public void bubbleSort(int[] nums){ in
- public class MenuEx extends Activity { private static final String TAG
- java 中基本算法之希尔排序的实例详解希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的
- // Create a handler for a click event.button1.Click += delegate(System
- Kotlin 支持泛型, 语法和 Java 类似。例如,泛型类:class Hello<T>(val value: T)val
- 使用Palette API选择颜色 良好的视觉设计是app成功所必不可少的, 而色彩设计体系是设计的基础构成. Palette包是
- 当对象改变其可达性状态时,对该对象的引用就可能会被置于引用队列(reference queue)中。这些队列被垃圾回收器用来与我们的代码沟通
- 简介本文用示例介绍SpringBoot如何向容器注册bean(即:将对象加入容器)。法1:@Component(@Controller/@S
- 前言初步接触了Socket,现使其与Unity相结合,做成一个简单的客户端之间可以互相发送消息的一个Test。下面话不多说了,来一起看看详细
- 本文实例为大家分享了java实现猜字母游戏的具体代码,供大家参考,具体内容如下案例需求:StepOne:系统随机生成一组随机的字符数组(不重
- 本文实例为大家分享了C#线程中弹窗的制作代码,供大家参考,具体内容如下首先建立一个ShowFrom窗体,窗体中放入两个按钮分别为确定和取消分
- Java 中的 CyclicBarrier 是一种同步工具,它可以让多个线程在一个屏障处等待,直到所有线程都到达该屏障处后,才能继续执行。C
- import android.provider.Settings.Secure;private String android_id = Se
- 前言今天介绍的是关于Spring的数据库连接以及Jdbc模板的相关API方法,虽然在学习了hibernate之后,会知道实现数据库连接一般都