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#