`
isiqi
  • 浏览: 16829081 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

用Visual C#实现文件下载功能

阅读更多
导读:
  一.概述:
  本文通过一个实例向大家介绍用Visual C#进行Internet通讯编程的一些基本知识。我们知道.Net类包含了请求/响应层、应用协议层、传输层等层次。在本程序中,我们运用了位于请求/响应层的WebRequest类以及WebClient类等来实现高抽象程度的Internet通讯服务。本程序的功能是完成网络文件的下载。
  二.实现原理:
  程序实现的原理比较简单,主要用到了WebClient类和FileStream类。其中WebClient类处于System.Net名字空间中,该类的主要功能是提供向URI标识的资源发送数据和从URI标识的资源接收数据的公共方法。我们利用其中的DownloadFile()方法将网络文件下载到本地。然后用FileStream类的实例对象以数据流的方式将文件数据写入本地文件。这样就完成了网络文件的下载。
  三.实现步骤:
  首先,打开Visual Studio.Net,新建一个Visual C# Windows应用程序的工程,不妨命名为"MyGetCar"。
  接着,布置主界面。我们先往主窗体上添加如下控件:两个标签控件、两个文本框控件、一个按钮控件以及一个状态栏控件。最终的主窗体如下图所示:
  
  
  完成主窗体的设计,我们接着完成代码的编写。
  在理解了基本原理的基础上去完成代码的编写是相当容易。程序中我们主要用到的是WebClient类,不过在我们调用WebClient类的实例对象前,我们需要用WebRequest类的对象发出对统一资源标识符(URI)的请求。
  try
  {
  WebRequest myre=WebRequest.Create(URLAddress);
  }
  catch(WebException exp)
  {
  MessageBox.Show(exp.Message,"Error");
  }
  这是一个try-catch语句,try块完成向URI的请求,catch块则捕捉可能的异常并显示异常信息。其中的URLAddress为被请求的网络主机名。
  在请求成功后,我们就可以运用WebClient类的实例对象中的DownloadFile()方法实现文件的下载了。其函数原型如下:
  public void DownloadFile( string address, string fileName);
  其中,参数address为从中下载数据的 URI,fileName为要接收数据的本地文件的名称。
  之后我们用OpenRead()方法来打开一个可读的流,该流完成从具有指定URI的资源下载数据的功能。其函数原型如下:
  ublic Stream OpenRead(string address);
  
  其中,参数address同上。
  最后就是新建一个StreamReader对象从中读取文件的数据,并运用一个while循环体不断读取数据,只到读完所有的数据。
  还有在使用以上方法时,你将可能需要处理以下几种异常:
  WebException:下载数据时发生错误。
  UriFormatException:通过组合 BaseAddress、address 和 QueryString 所构成的 URI 无效。
  这部分的代码如下:(client为WebClient对象,在本类的开头处声明即可)
  statusBar.Text = "开始下载文件...";
  client.DownloadFile(URLAddress,fileName);
  Stream str = client.OpenRead(URLAddress);
  StreamReader reader = new StreamReader(str);
  byte[] mbyte = new byte[100000];
  int allmybyte = (int)mbyte.Length;
  int startmbyte = 0;
  statusBar.Text = "正在接收数据...";
  while(allmybyte>0)
  {
  int m = str.Read(mbyte,startmbyte,allmybyte);
  if(m==0)
  break;
  startmbyte+=m;
  allmybyte-=m;
  }
  完成了文件数据的读取工作后,我们运用FileStream类的实例对象将这些数据写入本地文件中:
  FileStream fstr = new FileStream(Path,FileMode.OpenOrCreate,FileAccess.Write);
  fstr.Write(mbyte,0,startmbyte);
  这样,程序主体部分的代码已经完成了,不过要完成全部程序还需要一些工作。由于在程序接收网络文件数据的时候运用到了while循环体,这样会很占程序资源,表现的形式就是主窗体不能自由移动。为了解决这个问题,我们在程序中用到了多线程机制。我们在响应按钮的事件中新建一个线程,该线程就是用来实现网络文件下载功能的。如此,文件下载的线程和程序主线程并存,共享进程资源,使得程序顺畅运行。这样,我们在按钮控件的消息响应函数里添加如下代码:
  Thread th = new Thread(new ThreadStart(StartDownload));
  th.Start();
  该线程的实现函数就是StartDownload(),而上面介绍的那些代码就是这个函数的主体部分。
  最后,因为程序中运用到了WebRequest、WebClient、FileStream、Thread等类,所以最重要的就是在程序的开始处添加如下名字空间:
  using System.Net;
  using System.IO;
  using System.Threading;
  下面就是程序的源代码:
  using System;
  using System.Drawing;
  using System.Collections;
  using System.ComponentModel;
  using System.Windows.Forms;
  using System.Data;
  using System.Net;
  using System.IO;
  using System.Threading;
  namespace MyGetCar
  {
  ///
  /// Form1 的摘要说明。
  ///
  public class Form1 : System.Windows.Forms.Form
  {
  private System.Windows.Forms.Label label1;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.TextBox srcAddress;
  private System.Windows.Forms.TextBox tarAddress;
  private System.Windows.Forms.StatusBar statusBar;
  private System.Windows.Forms.Button Start;
  private WebClient client = new WebClient();
  ///
  /// 必需的设计器变量。
  ///
  private System.ComponentModel.Container components = null;
  public Form1()
  {
  //
  // Windows 窗体设计器支持所必需的
  //
  InitializeComponent();
  //
  // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
  //
  }
  ///
  /// 清理所有正在使用的资源。
  ///
  protected override void Dispose( bool disposing )
  {
  if( disposing )
  {
  if (components != null)
  {
  components.Dispose();
  }
  }
  base.Dispose( disposing );
  }
  #region Windows Form Designer generated code
  ///
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  ///
  private void InitializeComponent()
  {
  this.label1 = new System.Windows.Forms.Label();
  this.label2 = new System.Windows.Forms.Label();
  this.srcAddress = new System.Windows.Forms.TextBox();
  this.tarAddress = new System.Windows.Forms.TextBox();
  this.statusBar = new System.Windows.Forms.StatusBar();
  this.Start = new System.Windows.Forms.Button();
  this.SuspendLayout();
  //
  // label1
  //
  this.label1.Location = new System.Drawing.Point(8, 32);
  this.label1.Name = "label1";
  this.label1.Size = new System.Drawing.Size(72, 23);
  this.label1.TabIndex = 0;
  this.label1.Text = "文件地址:";
  this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
  //
  // label2
  //
  this.label2.Location = new System.Drawing.Point(8, 72);
  this.label2.Name = "label2";
  this.label2.Size = new System.Drawing.Size(72, 23);
  this.label2.TabIndex = 1;
  this.label2.Text = "另存到:";
  this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
  //
  // srcAddress
  //
  this.srcAddress.Location = new System.Drawing.Point(80, 32);
  this.srcAddress.Name = "srcAddress";
  this.srcAddress.Size = new System.Drawing.Size(216, 21);
  this.srcAddress.TabIndex = 2;
  this.srcAddress.Text = "";
  //
  // tarAddress
  //
  this.tarAddress.Location = new System.Drawing.Point(80, 72);
  this.tarAddress.Name = "tarAddress";
  this.tarAddress.Size = new System.Drawing.Size(216, 21);
  this.tarAddress.TabIndex = 3;
  this.tarAddress.Text = "";
  //
  // statusBar
  //
  this.statusBar.Location = new System.Drawing.Point(0, 151);
  this.statusBar.Name = "statusBar";
  this.statusBar.Size = new System.Drawing.Size(312, 22);
  this.statusBar.TabIndex = 4;
  //
  // Start
  //
  this.Start.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
  this.Start.Location = new System.Drawi

本文转自
http://study.qqcf.com/web/224/24011.htm
分享到:
评论

相关推荐

    用Visual_C#实现文件下载功能.pdf

    ### 使用 Visual C# 实现文件下载功能的知识点详解 #### 一、概述 在现代软件开发中,网络通信是一项非常重要的技术。对于.NET框架下的开发人员来说,掌握如何使用C#进行Internet通信是非常必要的技能之一。本文档...

    C#实现IIS服务器下载文件

    C#实现IIS服务器下载文件 本文将详细介绍如何使用C#语言实现IIS服务器下载文件的功能。通过使用WebClient类和FileStream类,可以实现高抽象程度的Internet通讯服务,并将网络文件下载到本地。 一、概述 本文通过...

    Visual C#实现文件分割合并器

    在这个场景中,我们关注的是一个使用Visual C#实现的文件分割合并器。Visual C#是微软公司开发的一种面向对象的编程语言,它以其强大、高效和易用性被广泛应用于Windows平台的软件开发。 首先,让我们理解文件分割...

    Visual C# 2005从入门到精通

    《Visual C# 2005从入门到精通》是一本专为初学者设计的编程教程,旨在帮助读者全面掌握Microsoft的C#编程语言及其在Visual Studio 2005环境下的应用。这本书覆盖了从基础语法到高级特性的全方位学习路径,确保读者...

    Visual C# 2008程序设计经典案例设计与实现(源代码)

    通过《Visual C# 2008程序设计经典案例设计与实现》这本书,读者不仅可以学习到C#语言的基本语法和.NET Framework的功能,还能通过实际案例锻炼编程技能,提升解决问题的能力。书中的源代码将帮助读者更直观地理解...

    visual c# 2008程序设计经典案例设计与实现》

    《Visual C# 2008程序设计经典案例设计与实现》是一本专注于利用Microsoft的C#编程语言在Visual Studio 2008环境下进行软件开发的实践指南。这本书涵盖了从基础到高级的各种主题,旨在帮助读者提升C#编程技能,并...

    C#+WinForm+FluentFTP实现文件上传下载功能实例

    通过WinForm调用FluentFTP库,实现FTP客户端,具体可参考本人博客【C# 利用FluentFTP实现FTP上传下载功能】 开发工具:VisualStudio2022 开发语言:C# 开发框架:.Net Framework4.8及以上

    8 Visual C#.NET

    【标题】"8 Visual C#.NET" 涵盖了微软开发环境下的C#编程语言,专注于使用Visual Studio工具进行应用程序开发。Visual C#是.NET框架的重要组成部分,它为开发者提供了一个高效、现代化的编程环境,用于构建各种类型...

    Beginning Visual C# 2010 Programming code

    《 Beginning Visual C# 2010 Programming code》是一本专为C#初学者设计的入门教程,旨在帮助读者快速掌握C#编程的基础知识。书中的代码实例是学习过程中的重要辅助工具,提供了实践和理解理论知识的平台。C#是一种...

    C#实现截屏功能C#实现截屏功能C#实现截屏功能

    以上是使用C#实现截屏功能的基本步骤。实际项目中可能需要考虑更多细节,如多显示器支持、自定义截取区域、剪贴板集成等。通过理解这些概念,并结合提供的"ScreenCutter"源代码,你可以创建一个功能完善的截屏工具,...

    Visual C# 图像处理

    而"DrawImageNetC.cs"可能是用纯C#实现的图像处理逻辑,对比使用插件的方式,可能会在性能或灵活性上有所不同。 C#图像处理的一些常见操作包括: 1. **读取和写入图像**:使用Image类的FromFile方法加载图像,Save...

    用Visual Basic .NET和Visual C#.NET开发XML Web服务与服务器组件

    总之,这个教程将带你深入XML Web服务的世界,通过Visual Basic .NET和Visual C#.NET,你可以构建出强大的分布式应用程序,实现跨平台、跨网络的通信。结合MCAD-MCSD的认证学习路径,这将极大地提升你的.NET开发技能...

    Visual C#实现HTTP代理服务程序

    3. **Visual C#实现Web代理服务**: - 代理服务器首先监听指定端口,等待客户端的HTTP请求。 - 收到请求后,解析出目标Web服务器的地址,创建Socket实例连接到该服务器。 - 通过Socket发送客户端的HTTP请求数据到...

    使用Visual C# 开发asp.NET入门(PDF).rar

    在使用Visual C#与ASP.NET结合开发时,你需要安装Visual Studio IDE,这是一个功能强大的集成开发环境,专门为.NET开发量身定制。Visual Studio提供了内置的C#支持,以及用于创建ASP.NET项目的模板。一旦你创建了一...

    用Visual C#实现P2P应用程序

    总结来说,使用Visual C#实现P2P应用程序的关键在于理解P2P的基本原理,以及有效地利用.NET框架提供的网络编程工具,如TcpListener和TcpClient,来构建能够监听、接收和发送数据的网络通信机制。这种实现方式可以...

    Visual C# 2005动态网站开发技术与实践

    《Visual C# 2005动态网站开发技术与实践》一书主要涵盖了使用Microsoft的Visual C# 2005进行动态网站开发的核心技术和实践经验。这本书旨在帮助开发者理解和掌握如何利用C#语言构建功能丰富的、高性能的Web应用程序...

    Visual C#基于组件的开发

    在实现阶段,使用Visual C#编写代码来创建组件,并利用.NET Framework的类库来实现所需功能。测试阶段,要确保组件在各种场景下都能正常工作,这通常涉及单元测试和集成测试。最后,部署组件到目标环境中,可以是...

    C# 实现Windows文件资源管理器

    总的来说,创建一个C#实现的Windows文件资源管理器需要对C#语法、.NET Framework以及文件系统操作有深入的理解。通过这个项目,开发者不仅可以提升编程技能,还能更好地掌握GUI应用的开发流程。

Global site tag (gtag.js) - Google Analytics