ftp下载 包501错误,说参数有错或无效上代码  public static bool DisplayFileFromServer(Uri serverUri,string pwd)
         {
            // The serverUri parameter should start with the ftp:// scheme.
            if (serverUri.Scheme != Uri.UriSchemeFtp)
            {
                return false;
            }
          
            WebClient request = new WebClient();
           
           //连接
            request.Credentials = new NetworkCredential("forumDB", pwd);
            try
            {
                byte[] newFileData = request.DownloadData(serverUri.ToString());
                string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
                Console.WriteLine(fileString);
            }
            catch (WebException e)
            {
                Console.WriteLine(e.ToString());
            }
            return true;
        }
 static void Main(string[] args)
        {
           // Download(@"c:/","a.txt");
            DisplayFileFromServer(new Uri("ftp://117.79.93.200//13_2_db120617.rar"),"ddddd");
}1.我确定 这个跟目录下确实有这个文件
2.用dos和游览器地址都能访问并下载,是我哪写错了?也希望别人能提供ftp下载代码.

解决方案 »

  1.   

    我不肯定是不是没指定命令的原因,你这样试试
    public static bool DisplayFileFromServer(Uri serverUri, string pwd)
    {
        // The serverUri parameter should start with the ftp:// scheme.
        if (serverUri.Scheme != Uri.UriSchemeFtp)
        {
            return false;
        }    try
        {
            var request = (FtpWebRequest)WebRequest.Create(serverUri);
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.Credentials = new NetworkCredential("forumDB", pwd);
            request.UseBinary = true;
            request.KeepAlive = false;
            using (var response = request.GetResponse())
            using (var stream = response.GetResponseStream())
            using (var ms = new MemoryStream())
            {
                var buf = new byte[10240];
                int len = 0;
                while ((len = stream.Read(buf, 0, buf.Length)) > 0)
                {
                    ms.Write(buf, 0, len);
                }
                byte[] newFileData = ms.ToArray();
                string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
                Console.WriteLine(fileString);
            }
        }
        catch (WebException e)
        {
            Console.WriteLine(e.ToString());
        }
        return true;
    }不过看样子下载下来的是个 rar 文件,GetString 会是乱码
      

  2.   


    internal static bool FtpDownloadFile(FtpSite ftpSite, Uri url)
    {
        if(url == null || url.Scheme == null)
        {
            throw new ArgumentNullException("URL");
        }
        if (FtpSite == null)
        {
            throw new ArgumentNullException("FtpSite");
        }
        if (!Uri.UriSchemeFtp.Equals(url.Scheme, StringComparer.CurrentCultureIgnoreCase))
        {
            throw new NotSupportedException("Only for FTP download!");
        }
        //根据URI创建FtpWebRequest对象
        FtpWebRequest ftpRequest = (FtpWebRequest)FtpWebRequest.Create(url);
        //ftp用户名和密码
        ftpRequest.Credentials = new NetworkCredential(ftpSite.UserName, ftpSite.Password);
        ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;     //指定操作类别
        ftpRequest.UseBinary = true;    //指定数据传输类型
        ftpRequest.KeepAlive = false;   //下载完后不用保持连接
        return SaveAsFile(ftpRequest, upgradeReport.SaveFileName);
    }static void SaveAsFile(WebRequest request, string saveName)
    {
        WebResponse response = null;
        request.Proxy = null;
        request.Timeout = 60000;    //设置请求超时时间
        //request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
        response = (WebResponse)request.GetResponse();
            using (var responseStream = response.GetResponseStream())
            {
                using (var fs = new FileStream(saveName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read))
                {
                    int bufferLength = 2048, offset = 0;
                    byte[] buffer = new byte[bufferLength];
                    while ((offset = responseStream.Read(buffer, 0, bufferLength)) > 0)
                        fs.Write(buffer, 0, offset);
                }
           }       
    }
      

  3.   

    return SaveAsFile(ftpRequest, upgradeReport.SaveFileName);
    =>
    SaveAsFile(ftpRequest, upgradeReport.SaveFileName);
      

  4.   


    static bool SaveAsFile(WebRequest request, string saveName)
            {
                WebResponse response = null;
                request.Proxy = null;
                request.Timeout = 60000;    //设置请求超时时间
                //request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
                try
                {
                    response = (WebResponse)request.GetResponse();
                    using (var responseStream = response.GetResponseStream())
                    {
                        using (var fs = new FileStream(saveName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read))
                        {
                            int bufferLength = 2048, offset = 0;
                            byte[] buffer = new byte[bufferLength];
                            while ((offset = responseStream.Read(buffer, 0, bufferLength)) > 0)
                            {
                                fs.Write(buffer, 0, offset);
                            }
                            fs.Close();
                        }
                    }
                    return true;
                }
                catch
                {                
                    return false;
                }