深爱那片海 发表于 2015-1-16 22:35:22

ASP.NET网站制作之用Visual C#完成文件下载

既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。visual|下载usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
usingSystem.Data;
usingSystem.Net;
usingSystem.IO;
usingSystem.Threading;

namespaceMyGetCar
{
///
///Form1的择要申明。
///
publicclassForm1:System.Windows.Forms.Form
{
privateSystem.Windows.Forms.Labellabel1;
privateSystem.Windows.Forms.Labellabel2;
privateSystem.Windows.Forms.TextBoxsrcAddress;
privateSystem.Windows.Forms.TextBoxtarAddress;
privateSystem.Windows.Forms.StatusBarstatusBar;
privateSystem.Windows.Forms.ButtonStart;

privateWebClientclient=newWebClient();


///
///必须的计划器变量。
///
privateSystem.ComponentModel.Containercomponents=null;

publicForm1()
{
//
//Windows窗体计划器撑持所必须的
//
InitializeComponent();

//
//TODO:在InitializeComponent挪用后增加任何机关函数代码
//
}

///
///清算一切正在利用的资本。
///
protectedoverridevoidDispose(booldisposing)
{
if(disposing)
{
if(components!=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}

#regionWindowsFormDesignergeneratedcode
///
///计划器撑持所需的办法-不要利用代码编纂器修正
///此办法的内容。
///
privatevoidInitializeComponent()
{
this.label1=newSystem.Windows.Forms.Label();
this.label2=newSystem.Windows.Forms.Label();
this.srcAddress=newSystem.Windows.Forms.TextBox();
this.tarAddress=newSystem.Windows.Forms.TextBox();
this.statusBar=newSystem.Windows.Forms.StatusBar();
this.Start=newSystem.Windows.Forms.Button();
this.button1=newSystem.Windows.Forms.Button();
this.SuspendLayout();
//
//label1
//
this.label1.Location=newSystem.Drawing.Point(8,32);
this.label1.Name="label1";
this.label1.Size=newSystem.Drawing.Size(72,23);
this.label1.TabIndex=0;
this.label1.Text="文件地点:";
this.label1.TextAlign=System.Drawing.ContentAlignment.MiddleRight;
//
//label2
//
this.label2.Location=newSystem.Drawing.Point(8,72);
this.label2.Name="label2";
this.label2.Size=newSystem.Drawing.Size(72,23);
this.label2.TabIndex=1;
this.label2.Text="另存到:";
this.label2.TextAlign=System.Drawing.ContentAlignment.MiddleRight;
//
//srcAddress
//
this.srcAddress.Location=newSystem.Drawing.Point(80,32);
this.srcAddress.Name="srcAddress";
this.srcAddress.Size=newSystem.Drawing.Size(216,21);
this.srcAddress.TabIndex=2;
this.srcAddress.Text="";
//
//tarAddress
//
this.tarAddress.Location=newSystem.Drawing.Point(80,72);
this.tarAddress.Name="tarAddress";
this.tarAddress.Size=newSystem.Drawing.Size(216,21);
this.tarAddress.TabIndex=3;
this.tarAddress.Text="";
//
//statusBar
//
this.statusBar.Location=newSystem.Drawing.Point(0,151);
this.statusBar.Name="statusBar";
this.statusBar.Size=newSystem.Drawing.Size(312,22);
this.statusBar.TabIndex=4;
//
//Start
//
this.Start.FlatStyle=System.Windows.Forms.FlatStyle.Flat;
this.Start.Location=newSystem.Drawing.Point(216,112);
this.Start.Name="Start";
this.Start.Size=newSystem.Drawing.Size(75,24);
this.Start.TabIndex=5;
this.Start.Text="入手下手下载";
this.Start.Click+=newSystem.EventHandler(this.Start_Click);

//
//Form1
//
this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);
this.ClientSize=newSystem.Drawing.Size(312,173);
this.Controls.Add(this.button1);
this.Controls.Add(this.Start);
this.Controls.Add(this.statusBar);
this.Controls.Add(this.tarAddress);
this.Controls.Add(this.srcAddress);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.MaximizeBox=false;
this.Name="Form1";
this.Text="文件下载器";
this.ResumeLayout(false);}
#endregion

///
///使用程序的主出口点。
///

staticvoidMain()
{
Application.Run(newForm1());
}

privatevoidStartDownload()
{
Start.Enabled=false;
stringURL=srcAddress.Text;
intn=URL.LastIndexOf("?");
stringURLAddress=URL;
//stringURLAddress=URL.Substring(0,n);
stringfileName=URL.Substring(n+1,URL.Length-n-1);
stringDir=tarAddress.Text;
stringPath=Dir+fileName;

try
{
WebRequestmyre=WebRequest.Create(URLAddress);
}
catch(WebExceptionexp)
{
MessageBox.Show(exp.Message,"Error");
}

try
{
statusBar.Text="入手下手下载文件...";
client.DownloadFile(URLAddress,fileName);
Streamstr=client.OpenRead(URLAddress);
//StreamReaderreader=newStreamReader(str);,这句没有甚么需要!团体以为
byte[]mbyte=newbyte;
intallmybyte=(int)mbyte.Length;
intstartmbyte=0;
statusBar.Text="正在吸收数据...";
//写进到BYTE数组中,起缓冲感化
while(allmybyte>0)
{
intm=str.Read(mbyte,startmbyte,allmybyte);
if(m==0)
break;

startmbyte+=m;
allmybyte-=m;
}

FileStreamfstr=newFileStream(Path,FileMode.OpenOrCreate,FileAccess.Write);
fstr.Write(mbyte,0,startmbyte);
str.Close();
fstr.Close();

statusBar.Text="下载终了!";
}
catch(WebExceptionexp)
{
MessageBox.Show(exp.Message,"Error");
statusBar.Text="";
}

Start.Enabled=true;
}


privatevoidStart_Click(objectsender,System.EventArgse)
{
Threadth=newThread(newThreadStart(StartDownload));
th.Start();
}
}
}
它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。

若天明 发表于 2015-1-19 17:51:35

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

小女巫 发表于 2015-1-24 15:38:07

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

海妖 发表于 2015-2-1 21:44:12

CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。

灵魂腐蚀 发表于 2015-2-7 15:36:54

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

活着的死人 发表于 2015-2-22 11:32:13

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

再现理想 发表于 2015-3-7 00:10:46

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

admin 发表于 2015-3-13 23:10:43

由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。

飘灵儿 发表于 2015-3-20 22:18:48

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
页: [1]
查看完整版本: ASP.NET网站制作之用Visual C#完成文件下载