我试图进行ftp上传和下载,但是它一直都在Nullreference错误中。可能opennetcf.net.ftp不是解决问题的最佳方法吗?谁能帮助我解决问题?



namespace ftp_load
{



    public partial class Form1 : Form
    {

        public class FTPManagerClass
        {
            private static string password = "";
            private static string username = "";
            private static string host = "";

            private FtpWebRequest ftpRequest = null;
            private FtpWebResponse ftpResponse = null;
            private Stream ftpStream = null;
            // private int bufferSize = 2048;

            public FTPManagerClass(string user, string pass, string hostname)
            {
                username = user;
                password = pass;
                host = hostname;

            }

            public void DownloadFile(string remoteFile, string localFIle)
            {
                try
                {
                    ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + remoteFile);
                    ftpRequest.Credentials = new NetworkCredential(username, password);
                    //ftpRequest.UseBinary = true;
                    ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
                    ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
                    ftpStream = ftpResponse.GetResponseStream();
                    FileStream fs = new FileStream(localFIle, FileMode.OpenOrCreate);

                    fs.Close();
                    ftpStream.Close();
                    ftpResponse.Close();
                    ftpRequest = null;


                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);

                }
            }

            public void UploadFile(string localFile, string remoteFile)
            {
                try
                {
                    ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + remoteFile);
                    ftpRequest.Credentials = new NetworkCredential(username, password);
                    //  ftpRequest.UseBinary = true;
                    // ftpRequest.UsePassive = true;
                    ftpRequest.KeepAlive = false;
                    ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
                    ftpStream = ftpRequest.GetRequestStream();
                    FileStream lfs = new FileStream(localFile, FileMode.Open);
                    byte[] bytebuffer = new byte[lfs.Length];
                    int bytesSend = lfs.Read(bytebuffer, 0, (int)lfs.Length);
                    try
                    {

                        while (bytesSend != -1)
                        {
                            ftpStream.Write(bytebuffer, 0, bytesSend);
                            bytesSend = lfs.Read(bytebuffer, 0, (int)lfs.Length);

                        }
                    }
                    catch (Exception ex)
                    {

                        MessageBox.Show(ex.Message);
                    }
                    ftpResponse.Close();
                    ftpStream.Close();
                    lfs.Close();
                    ftpRequest = null;

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
        }

        FTPManagerClass client;
        private static string password = "";
        private static string username = "";
        private static string host = "";

        private FtpWebRequest ftpRequest = null;
        private FtpWebResponse ftpResponse = null;
        private Stream ftpStream = null;


        public Form1()
        {
            InitializeComponent();
            connMgr = new ConnMgr();
            connMgr.StatusChanged += new ConnMgr.StatusChangedEventHandler(StatusChanged_Handler);
        }
        private ConnMgr connMgr;
        private void button1_Click(object sender, EventArgs e)
        {
            if (txt_br_down.Text != "")
            {
                client.DownloadFile(@"/GP_FTP/ans.txt", @"/download");
                client = new FTPManagerClass("usr", "pwd", "ftp://ftp.tzf.com");
            }

            else
            {
                MessageBox.Show("Ures mezo");
            }
        }






        private void txt_br_dw_1_TextChanged(object sender, EventArgs e)
        {

        }


GPRS连接建立了,但是在ftp连接之后出现了一些问题:

        private void btn_login_Click(object sender, EventArgs e)
        {

        }

        private void btn_login_Click_1(object sender, EventArgs e)
        {
            if (!connMgr.Connected)
            {
                connMgr.Connect("pannon", ConnMgr.ConnectionMode.Synchronous, " ", " ", "net");
                txtLog.Text += "Sync connection successful\r\n";
            }
            else
            {
                MessageBox.Show("No connection!");
            }
  }

        private void txtLog_TextChanged(object sender, EventArgs e)
        {

        }
        private void StatusChanged_Handler(object sender, ConnMgr.StatusChangedEventArgs e)
        {
            connMgr.Timeout = 3000;
            txtLog.Text += e.desc + "\r\n";         // Show current state's description

            if (!connMgr.Waiting)
                if (connMgr.Connected)
                    txtLog.Text += "Confirmed - We are now connected\r\n";
                else
                {
                    txtLog.Text += "Confirmed - Connection instance has been released\r\n";
                    // btnCancel.Enabled = false;
                    // btnConnect.Enabled = true;
                }

            if (e.connstatus == ConnMgr.ConnectionStatus.ExclusiveConflict)
                MessageBox.Show("If using Activesync, check connection settings for 'Allow wireless connection ...' or remove from homebase.");
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }


不,看起来认证可以。没有问题!

我做的:

  try
                {
                  client = new FTPManagerClass("usr", "pwd", "ftp://ftp.tzf.com");
                }
                catch (Exception ex)
                {

                    MessageBox.Show("Login"+ ex);
                }


还行吧!

但是之后:ctacke

            try

            {
                MessageBox.Show("before download");
               client.DownloadFile("/GP_FTP/ans.txt", "/download");
               MessageBox.Show("after download");
            }

            catch (Exception ex1)

            {


                MessageBox.Show("file"+ ex1);

            }


现在的问题是:在client.DownloadFile System.nullreferenceException
现在我不知道:(。
有点可惜...

为什么这是空的? client.DownloadFile(@"/GP_FTP/ans.txt", @"/download");
我尝试了client.DownloadFile("/GP_FTP/ans.txt", "/download");client.DownloadFile("ans.txt", "/download");
和相同的。为什么?

最佳答案

这行不通:

client.DownloadFile(@"/GP_FTP/ans.txt", @"/download");
client = new FTPManagerClass("usr", "pwd", "ftp://ftp.tzf.com");


如果尚未分配变量,则无法对它执行操作-然后得到NullReferenceExceptionnew位首先出现:

client = new FTPManagerClass("usr", "pwd", "ftp://ftp.tzf.com");
client.DownloadFile(@"/GP_FTP/ans.txt", @"/download");


在尝试下载文件之前,指定ftp地址并发送用户名,密码也应该更有意义。

10-01 20:44