先看效果图:

代码(没什么难度的一个案例,进度条为第三方控件ProgressODoom.dll,自己去网上下。)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using System.Threading; namespace VideoTrans
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
LoadListView();
this.FormClosed += (sender, e) => {
Application.Exit();
System.Diagnostics.Process pro = System.Diagnostics.Process.GetCurrentProcess();
pro.Kill();
};
}
/// <summary>
/// 初始化上传列表
/// </summary>
void LoadListView()
{
listView1.View = View.Details;
listView1.CheckBoxes = true;
listView1.GridLines = true;
listView1.Columns.Add("文件名",,HorizontalAlignment.Center);
listView1.Columns.Add("文件大小", , HorizontalAlignment.Center);
listView1.Columns.Add("文件路径", , HorizontalAlignment.Center);
}
/// <summary>
/// 存储目录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if(fbd.ShowDialog()==DialogResult.OK)
{
textBox1.Text=fbd.SelectedPath;
}
}
/// <summary>
/// 打开上传文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{ OpenFileDialog ofd = new OpenFileDialog();
ofd.Multiselect = true;
if(ofd.ShowDialog()==DialogResult.OK)
{
foreach(string filename in ofd.FileNames)
{
FileInfo fi=new FileInfo(filename);
ListViewItem lvi = new ListViewItem(Path.GetFileNameWithoutExtension(filename));
lvi.Tag = filename;
lvi.SubItems.Add(fi.Length.ToString());
//lvi.SubItems.Add((fi.Length / (1024 * 1024)).ToString() + "M");
lvi.SubItems.Add(Path.GetDirectoryName(filename));
listView1.Items.Add(lvi);
} }
}
public delegate void DeleFile(int position);
/// <summary>
/// 文件上传
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{ if (textBox1.Text.Trim().Equals(""))
{
MessageBox.Show("请先选择存储目录..!");
}
else
{ if (listView1.Items.Count > )
{
int j = ;
string count = listView1.CheckedItems.Count.ToString();
for (int i = ; i < listView1.Items.Count;i++ )
{ if (listView1.Items[i].Checked)
{
j++;
string fileName = Path.GetFileName(listView1.Items[i].Tag.ToString());
label1.Text = string.Format("正在上传文件:[{0}]", listView1.Items[i].Text) + ":" + j.ToString() + ":" + count;
FileStream des = new FileStream(Path.Combine(textBox1.Text, fileName), FileMode.OpenOrCreate, FileAccess.Write);
FileStream fir = new FileStream(listView1.Items[i].Tag.ToString(), FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[];
int size = ; int ren = ;
while (ren < fir.Length)
{
Application.DoEvents();
size = fir.Read(buffer,,buffer.Length);
des.Write(buffer, , size);
ren += size;
Pro(ren);
}
listView1.Items[i].Checked = false;
}
else
{
continue;
}
}
//MessageBox.Show("上传成功!");
}
else
{
return;
}
} }
public void Pro(int copy)
{ if (this.progressBarEx1.InvokeRequired)
{
this.progressBarEx1.Invoke(new DeleFile(Pro),new object[]{copy});
return;
}
foreach (ListViewItem lvi in listView1.CheckedItems)
{
string total = lvi.SubItems[].Text;
int pro = (int)((float)copy / long.Parse(total) * );
if (pro <= progressBarEx1.Maximum)
{
progressBarEx1.Value = pro;
progressBarEx1.Text = label1.Text.Split(':')[].ToString() + Environment.NewLine + string.Format("上传进度:{0}%", pro) + Environment.NewLine + string.Format("已上传文件数:{0}/{1}", label1.Text.Split(':')[].ToString(), label1.Text.Split(':')[].ToString()); }
} }
/// <summary>
/// 删除文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
foreach(ListViewItem lvi in listView1.CheckedItems)
{
lvi.Remove();
}
} }
}

转自:http://blog.csdn.net/wanlong360599336/article/details/7564508

【.NET】转载:使用FileStream批量上传文件。的更多相关文章

  1. Linux命令之rz - 批量上传文件,简单易用(转载)

    用途说明 rz命令能够批量上传文件,当然也可上传单个文件啦.使用的协议是古老的ZMODEM协议,尽管协议古老,但毫不影响的简单易用的特性.一般情 况我们要上传文件到Linux系统,要么使用ftp(还得 ...

  2. 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder

    请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...

  3. 使用 sendKeys(keysToSend) 批量上传文件

    未经允许,禁止转载!!! 在selenium里面处理文件上传的时候可以使用sendKeys(keysToSend) 上传文件 例如: element.sendKeys(“C:\\test\\uploa ...

  4. 不带插件 ,自己写js,实现批量上传文件及进度显示

    今天接受项目中要完成文件批量上传文件而且还要显示上传进度,一开始觉得这个应该不是很麻烦,当我在做的时候遇到了很多问题,很头疼啊. 不过看了别人写的代码,自己也测试过,发现网上好多都存在一些问题,并不是 ...

  5. Python基于Python实现批量上传文件或目录到不同的Linux服务器

    基于Python实现批量上传文件或目录到不同的Linux服务器   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用方法 1 1. 编辑配置文件conf/rootpath_fo ...

  6. input file multiple 批量上传文件

    这几天维护系统,有一个批量上传文件功能,出现了一点小问题 我的笔记本选择要上传的文件很正常 但在测试环境上,别人的电脑上,选择上传文件之后 一开始,以为是代码问题,网上找了很多的资料,但还是没用,然后 ...

  7. TP3.2批量上传文件(图片),解决同名冲突问题

    1.html <form action="{:U('Upload/index')}" enctype="multipart/form-data" meth ...

  8. 用Azure CLI批量上传文件

    在Windows环境下,我们可以使用AzCopy批量上传文件.其效率和传输速率都是非常快的. 在Linux或MacOS环境下,可以使用Azure的CLI实现批量文件的上传. 下面的脚本可以实现此功能. ...

  9. Java Miniui实现批量上传文件demo 201906221520

    可能需要的jar包: 需要miniui(类似easyui). Test2019062201.jsp <%@ page language="java" contentType= ...

随机推荐

  1. 在MyEclipse 2013中使用图形界面快速配置Struts2的操作方法

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  2. C语言之函数的声明

    函数的声明 1.函数只能定义在函数外,不能定义在函数内 2.函数不允许重名,C语言中函数没有重载 3.函数只要一经定义,就可以在任意函数中调用 注意:如果函数定义在它调用之后,那么必须在调用之前,先声 ...

  3. express框架+jade+bootstrap+mysql开发用户注册登录项目

    完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...

  4. C# 关于委托的小例子

    本例子是一个关于委托的小例子[猫叫,狗跳,人喊]. 委托是C#开发中一个非常重要的概念,理解起来也和常规的方法不同,但一旦理解清楚,就可以信手拈来,随处可用. 委托是对方法的抽象.它存储的就是一系列具 ...

  5. 前端MVC学习笔记(四)——NodeJS+MongoDB+AngularJS+Bootstrap书店示例

    这章的目的是为了把前面所学习的内容整合一下,这个示例完成一个简单图书管理模块,因为中间需要使用到Bootstrap这里先介绍Bootstrap. 示例名称:天狗书店 功能:完成前后端分离的图书管理功能 ...

  6. bootstrp-select插件使用

    需要导入 <link rel="stylesheet" href="js/plugins/silviomoreto-bootstrap-select20151109 ...

  7. 利用fiddler将本地网页放到某个域下

    注: 1)在学习慕课网课程<搜索框制作>中遇到如题困难,查找资料后解决,做此记录.课程网址http://www.imooc.com/video/263. 2)建议同时去学习慕课网课程< ...

  8. C#笔记(二)变量

    C#把数据类型分为两种 ● 值类型 ● 引用类型 从概念上看:其区别是值类型直接存储其值,而引用类型存储对值的引用 这两种类型存储在内存的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上 如果变 ...

  9. linux标准输入输出2>&1

    linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2.     STDIN是标准输入,默认从键盘读取信息:STDOUT是标准输出,默认将输出结果输出至终 ...

  10. c# 读取ACCESS 数据库

    using System; using System.Collections.Generic; using System.Data.OleDb; using System.IO; using Syst ...