繁体   English   中英

FTP从服务器下载文件

[英]FTP downloading a file from a server

我正在尝试通过FTP从MOXA UC8410下载文件。 我的代码无法正常工作。 这是我的代码:

 void download2()
        {

            Uri serverUri = new Uri("ftp://169.254.1.1/CFDisk/PCPACM/pcpacm.ini");
            // The serverUri parameter should start with the ftp:// scheme.
            if (serverUri.Scheme != Uri.UriSchemeFtp)
            {

            }
            // Get the object used to communicate with the server.
            WebClient request = new WebClient();

            // This example assumes the FTP site uses anonymous logon.
            request.Credentials = new NetworkCredential("admin", "admin");
            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());
                MessageBox.Show(e.Response + e.Message);
            }
        }

我也尝试过这个:

void download()
        {
            try
            {
                // Get the object used to communicate with the server.
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri("ftp://169.254.1.1:21/CFDisk/PCPACM/pcpacm.ini"));
                // using admin as the username and admin as the passward.
                request.Credentials = new NetworkCredential("admin", "admin");
                //request.KeepAlive = false;
                request.Method = WebRequestMethods.Ftp.DownloadFile;
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);
                processingfile(reader);
                responseStream.Close();
                reader.Close();
            }
            catch (Exception e2)
            {
                MessageBox.Show("Not connected" , e2.Message);
            }
        }

代码到达

Stream responseStream = response.GetResponseStream();

它只是停止,它永远不会前进到下一行。

输出说:

线程0x175c已退出,代码为259(0x103)。
线程0x212c已退出,代码为259(0x103)。

这没有帮助。

我可以使用命令提示符通过ftp下载到MOXA UC8410,并且可以使用FileZilla下载文件,但不能使用我的代码下载文件。 Moxa UC8410上没有防火墙,因此我的代码最有问题。

UpDate:UpDATE它正在工作!!!

但仅当我转到本地连接属性并将Internet协议版本4(tcp / IPv4)更改为

使用以下IP地址:

IP地址:169.254.1.5

子网掩码:225.225.0.0

有人知道为什么吗? 有没有一种方法可以解决我不必这样做的问题?

为什么我必须将它们放在相同的子域中?

由于无法发表评论,因此将我的问题放在这里:

1)使用FileZilla登录时,您是从CFDisk所在的目录开始吗? 2)您是否使用纯文本FTP? 使用基于TLS的FTP时,方法略有不同。 3)是否抛出异常? 如果是这样,也请向我们提供更多详细信息。

同样, WebResponseStreamStreamReader是一次性的。

我创建了这个小Windows窗体应用程序(并在其中一个远程服务器上进行了测试)。 在这里似乎工作正常。 看看吧。

using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace FTPTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string localPath = @"C:\Temp\navigazione-privata.pdf";
            string ftpIPAddress = "xxx.xxx.xxx.xxx";
            string remoteFilepath = "/userdownloads/navigazione-privata.pdf";

            string ftpPath = "ftp://" + ftpIPAddress + remoteFilepath;

            using (WebClient request = new WebClient())
            {
                request.Credentials = new NetworkCredential("username", "password");
                byte[] fileData = request.DownloadData(ftpPath);

                using (FileStream file = File.Create(localPath))
                {
                    file.Write(fileData, 0, fileData.Length);
                    file.Close();
                }
                MessageBox.Show("Requested file downloaded");
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM