当前位置:编程学习 > C#/ASP.NET >>

winform做FTP上传的问题

我想用winform做一个上传FTP的功能,大致用FtpWebRequest来完成,是图形界面,带进度条,三个问题
1.请问怎么加进度条,希望是异步的,不希望一出现进度条就是满的,没有一个渐进的过程,这个我不太了解,有人给例子就太好了。
2.有没有一个检验机制,就是能快速判断这个ftp连不连得上,如果连不上,能马上反应
3.如果没有2的机制,那么只能写try catch来完成,问一下怎样出错后处理,才不会产生垃圾以及文件被占用情况

谢谢大家,100分是我最多能散的分了,单个问题也行,相应给分。
--------------------编程问答-------------------- 这个得用线程,在分段上传的中间更新界面。
没有办法避免文件传输中出错,不过你可以在完成上传后把文件移动到其他目录,定时清除那些很久没有被移走的文件。
--------------------编程问答-------------------- 爱莫能助· --------------------编程问答-------------------- 仿csdn上传进度条 --------------------编程问答-------------------- --------------------编程问答-------------------- 期待LZ问题能解决 到时候希望共享下资源! --------------------编程问答-------------------- 1.进度条容易,吧下载独立一个线程,间隔时间通知界面更新进度条。
2.不了解,ftp上看有没有 MD5 值,一般下载完成后,根据文件生成MD5,进行对比。
3.如果不验证,你下载完成只是不知道数据是否错误,但不论是否验证,都不会有异常,除非网络断开,连接超时。 --------------------编程问答-------------------- 的好好学习学习了! --------------------编程问答-------------------- 可能我没表达第二条第三天的清楚意思吧,我现在的代码如下,但是不能实现所有的需求
1.ProgressBar 这样子是不行的,因为一出现基本就是满的,主要是没有异步完成
2.怎样多线,我不会给文件分块,怎么表示发送进度,下面的判断发送进度方法对不对?
3.我用try catch如果FTP那个地址连不上,那么还要等很长时间,才会出现The requested FTP command is not supported when using HTTP proxy. 才知道连不上,有没有快速知道连接的方法
WebResponse会不会快一点?

同时我在MSDN上找到了http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.NET.FTPWEBREQUEST%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV2.0%22%29;k%28DevLang-CSHARP%29&rd=true
但是还是不会用进度条,不知道熟悉的牛人给下指点


public void UploadFile(string filename,ProgressBar progressBar)
        {
            FileInfo fileInf = new FileInfo(filename);
            string uri = "ftp://" + ftpServer + ":" + ftpPort.ToString() + "/" + fileInf.Name;
            FtpWebRequest reqFTP;
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            reqFTP.KeepAlive = false;
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            reqFTP.UseBinary = true;
            reqFTP.ContentLength = fileInf.Length;
            int buffLength = 512;
            byte[] buff = new byte[buffLength];
            int contentLen;
            long hasRead=0;
            long totalSize = fileInf.Length; 
            FileStream fs = fileInf.OpenRead();
            Stream strm=null;
            try
            {
                progressBar.Maximum = int.MaxValue;
                progressBar.Minimum = 0;
                progressBar.Value = 0;      
                contentLen = fs.Read(buff, 0, buffLength);
                strm = reqFTP.GetRequestStream();
                while (contentLen != 0)
                {
                    strm.Write(buff, 0, contentLen);
//用buffer判断进度对不对呢?
                    contentLen = fs.Read(buff, 0, buffLength);
                    hasRead += contentLen;
//请问怎么改多线程。
                    progressBar.Value = (int)(int.MaxValue * ((double)hasRead / (double)totalSize));
                }
                //strm.Close();
                //fs.Close();
                MessageBox.Show("Upload   finished ");
                progressBar.Hide();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Upload   Error ");
            }
            finally
            {
                if(strm!=null)
                    strm.Close();
                fs.Close();
            }
        }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,