DownloadFileAsync下载文件大小为0?

时间:2021-01-28 14:01:22
用DownloadFileAsync从FTP服务器上下载文件,为什么有的时候下载的文件大小为0,而且不报任何错误?

14 个解决方案

#1


没人遇到过?

#2


这个问题太难了还是太弱智了??????

#3


网络错误或者服务器错误导致的,

#4


本帖最后由 net_lover 于 2011-07-28 15:18:45 编辑
一段显示下载进度条的下载文件代码


 public static void DownFile( string URL, string Filename, ProgressBar Prog )
{
  System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
  System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
  long totalBytes = myrp.ContentLength;
  Prog.Maximum = (int)totalBytes;
  System.IO.Stream st = myrp.GetResponseStream();
  System.IO.Stream so = new System.IO.FileStream(Filename, System.IO.FileMode.Create);
  long totalDownloadedByte = 0;
  byte[] by = new byte[1024];
  int osize = st.Read(by, 0, (int)by.Length);
  while (osize > 0)
  {
    totalDownloadedByte = osize + totalDownloadedByte;
    Application.DoEvents();
    so.Write(by, 0, osize);
    Prog.Value = (int)totalDownloadedByte;
    osize = st.Read(by, 0, (int)by.Length);
  }
  so.Close();
  st.Close();
}

#5


本帖最后由 net_lover 于 2011-07-28 15:18:02 编辑
由于服务器未发送文件大小,因此被动 FTP 文件传输总是将进度百分比显示为零。 若要显示进度,可以通过重写 GetWebRequest 虚方法来将 FTP 连接更改为活动状态。 
请采用
internal class MyWebClient:WebClient{
        protected override WebRequest GetWebRequest(Uri address) {
            FtpWebRequest req = (FtpWebRequest)base.GetWebRequest(address);
            req.UsePassive = false;
            return req;
        }
    }

#6


引用 3 楼 net_lover 的回复:
网络错误或者服务器错误导致的,

您说的很对,自己又测试了一下,下载为0的时候确实返回“426 Data connection closed, transfer aborted”错误,为什么呢?而且只是偶尔才有,还有点奇怪的是在虚拟机上这个错误出现几率很大,在真机上几乎不出现,求高手指点。。。why?

#7


我那天也碰到这样的一个错误,找了一个下午!不过我好像是改了什么地址!

#8


啥错也没有?说明文件你创建了,可压根就没有连接上FTP,然后就结束了...

#9


端口超时。

#10


ftp就采用FtpWebRequest不是很好的吗?
很多类,各司其职啊

#11


引用 8 楼 viki117 的回复:
啥错也没有?说明文件你创建了,可压根就没有连接上FTP,然后就结束了...

貌似是这样,可怎么解决呢?

#12


引用 10 楼 net_lover 的回复:
ftp就采用FtpWebRequest不是很好的吗?
很多类,各司其职啊

我也想啊,可这个程序不是我写的,我负责fix bug....

#13


2天时间了,重写也该写出了。

#14


引用 13 楼 net_lover 的回复:
2天时间了,重写也该写出了。

俄,要是没有好的办法只能改了。

#1


没人遇到过?

#2


这个问题太难了还是太弱智了??????

#3


网络错误或者服务器错误导致的,

#4


本帖最后由 net_lover 于 2011-07-28 15:18:45 编辑
一段显示下载进度条的下载文件代码


 public static void DownFile( string URL, string Filename, ProgressBar Prog )
{
  System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
  System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
  long totalBytes = myrp.ContentLength;
  Prog.Maximum = (int)totalBytes;
  System.IO.Stream st = myrp.GetResponseStream();
  System.IO.Stream so = new System.IO.FileStream(Filename, System.IO.FileMode.Create);
  long totalDownloadedByte = 0;
  byte[] by = new byte[1024];
  int osize = st.Read(by, 0, (int)by.Length);
  while (osize > 0)
  {
    totalDownloadedByte = osize + totalDownloadedByte;
    Application.DoEvents();
    so.Write(by, 0, osize);
    Prog.Value = (int)totalDownloadedByte;
    osize = st.Read(by, 0, (int)by.Length);
  }
  so.Close();
  st.Close();
}

#5


本帖最后由 net_lover 于 2011-07-28 15:18:02 编辑
由于服务器未发送文件大小,因此被动 FTP 文件传输总是将进度百分比显示为零。 若要显示进度,可以通过重写 GetWebRequest 虚方法来将 FTP 连接更改为活动状态。 
请采用
internal class MyWebClient:WebClient{
        protected override WebRequest GetWebRequest(Uri address) {
            FtpWebRequest req = (FtpWebRequest)base.GetWebRequest(address);
            req.UsePassive = false;
            return req;
        }
    }

#6


引用 3 楼 net_lover 的回复:
网络错误或者服务器错误导致的,

您说的很对,自己又测试了一下,下载为0的时候确实返回“426 Data connection closed, transfer aborted”错误,为什么呢?而且只是偶尔才有,还有点奇怪的是在虚拟机上这个错误出现几率很大,在真机上几乎不出现,求高手指点。。。why?

#7


我那天也碰到这样的一个错误,找了一个下午!不过我好像是改了什么地址!

#8


啥错也没有?说明文件你创建了,可压根就没有连接上FTP,然后就结束了...

#9


端口超时。

#10


ftp就采用FtpWebRequest不是很好的吗?
很多类,各司其职啊

#11


引用 8 楼 viki117 的回复:
啥错也没有?说明文件你创建了,可压根就没有连接上FTP,然后就结束了...

貌似是这样,可怎么解决呢?

#12


引用 10 楼 net_lover 的回复:
ftp就采用FtpWebRequest不是很好的吗?
很多类,各司其职啊

我也想啊,可这个程序不是我写的,我负责fix bug....

#13


2天时间了,重写也该写出了。

#14


引用 13 楼 net_lover 的回复:
2天时间了,重写也该写出了。

俄,要是没有好的办法只能改了。