当前位置: 首页 > 编程语言 > C#

文件传输分享进度条

时间:2023-04-10 13:32:35 C#

文件传输进度条大家好,祝大家一切顺利。我正在为LAN创建文件传输,我想在该文件传输中放置一个进度条,以便用户可以看到传输进度。如何根据文件大小和传输速率来操作进度条?示例:我将一个10mb的文件发送到网络中的另一台计算机。我希望进度显示剩余时间或完成传输需要多长时间。这里的任何人都可以告诉我该怎么做吗?看看http://www.codeproject.com/KB/files/Copy_files_with_Progress.aspx它可能会让你得到你想要的或者至少让你朝着正确的方向前进。1)创建一个名为hmmmFileSender的类2)你的类将发送分组到块中的数据3)向你的类添加选项,如MaxBlockSize-这将是你将在一个块中发送的最大数据量4)创建一个委托OnBlockTransfer或其他东西像这样5)创建一个像FileSender.Send()这样的方法...此方法将开始发送文件,并且在每个块之后您的类将执行您的委托。在委托调用的方法中,可以刷新状态栏。传输速度快;您需要检查系统时间,并计算您发送的数据。1)您应该在循环的一部分发送文件。因此,您可以确定百分比的进度。2)您应该在BackgroundWorker中执行此操作(它是工具箱中提供的一个组件)。后台工作程序有一个ProgressChanged事件,可以通过在DoWork方法中调用ReportProgress来触发该事件。另外,不要忘记将属性WorkerReportsProgress设置为true。3)在ProgressChanged事件中,改变你需要的UI对应当前状态。最好的方法是将您的传输文件放在一个线程中,并通过调用方法更新您的进度状态。在我的代码中,我使用FTP传输一个zip文件。这是我的解决方案和示例代码:1-在您的主窗体中,您必须有进度条,在我的代码中我将其命名为“prbSendata”2-调用传输线程:ThreadoThread=newThread(Transfer);oThread.Start(this);this.Cursor=Cursors.WaitCursor;3-你必须有这样一个传输文件:以上就是C#学习教程的全部内容:文件传输的进度条,如果对大家有用,还需要详细了解C#学习教程,希望大家多多指教多加注意—privatestaticvoidTransfer(objectobj){frmMainfrmPar=(frmMain)obj;尝试{字符串文件名=_strStartingPath+@""+_strZipFileName+".zip";FileInfofileInf=newFileInfo(文件名);stringuri=_strFtpAddress+"/"+fileInf.Name;FtpWebRequestreqFTP;//从提供的Uri创建FtpWebRequest对象reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri(uri));//提供WebPermissionCredintialsreqFTP.Credentials=newNetworkCredential(_strFtpUserName,_strFtpPassword);//默认情况下,KeepAlive为真,其中控制连接//在命令执行后不关闭。reqFTP.KeepAlive=false;//指定要执行的命令.reqFTP.Method=WebRequestMethodds.Ftp.上传文件;//指定数据传输类型。reqFTP.UseBinary=true;//通知服务器上传文件的大小reqFTP.ContentLength=fileInf.Length;//缓冲区大小设置为2kbintbuffLength=2048;byte[]buff=newbyte[buffLength];int内容长度;//打开一个文件流(System.IO.FileStream)来读取要上传的文件FileStreamfs=fileInf.OpenRead();//待上传文件写入的流Streamstrm=reqFTP.GetRequestStream();//一次从文件流中读取2kbcontentLen=fs.Read(buff,0,buffLength);frmPar.prbSendata.Control.Invoke((MethodInvoker)(()=>{frmPar.prbSendata.Minimum=0;frmPar.prbSendata.Maximum=100;}));//直到Stream内容结束longloadSize=0;while(contentLen!=0){//将文件流中的内容写入FTP上传流loadSize+=contentLen;frmPar.prbSendata.Control.Invoke((MethodInvoker)(()=>{frmPar.prbSendata.Value=(int)(loadSize*100/fileInf.长度);}));strm.Write(buff,0,contentLen);contentLen=fs.Read(buff,0,buffLength);}//关闭文件流和请求流strm.Close();飞秒。关闭();}catch(Exceptionerr){MessageBox.Show("Error:"+err.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);}frmPar.txtResult.Invoke((MethodInvoker)(()=>frmPar.Cursor=Cursors.Default));}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: