2015-10-28 32 views
2

我試圖做一個ftp上傳和下載,但它是所有的時間去Nullreference錯誤。可能是因爲opennetcf.net.ftp不是解決問題的最佳方法嗎?任何人都可以幫我解決這個問題嗎?ftp上傳/下載在C#爲windows mobile 6.5與opencf.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) 
     { 

     } 

沒有看起來的認證ok.There是沒有問題的!

我做了這個:

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

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

這是OK!

但經過這樣的: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.DownloadFileSystem.nullreferenceException 現在我不知道:( 它可以是有些可惜的事......

這是爲什麼空?client.DownloadFile(@"/GP_FTP/ans.txt", @"/download"); 我想client.DownloadFile("/GP_FTP/ans.txt", "/download");client.DownloadFile("ans.txt", "/download"); 和相同的,爲什麼呢?

+0

感謝Gilles的編輯! – user5494221

+0

在所有這些代碼中哪裏是NullReferenceException發生? – ctacke

+0

'client.DownloadFile(@「/ GP_FTP/ans.txt」,@「/ download」);' – user5494221

回答

0

這是行不通的:

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

如果你還沒有分配的東西它但你不能對一個變量進行操作 - 那麼你得到一個NullReferenceException。該new位先行:

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

指定的FTP地址和之前發送的用戶名,密碼試圖下載的文件應該能理解了。

+0

我試圖登錄到另一個按鈕,然後連接(寫入文本框)到FTP嘗試下載上傳但所有時間都會去'空引用異常'。我認爲問題不在那裏! – user5494221

+0

這裏可能存在多個問題 - 'clientRecoveryException'仍然出現在'client.DownloadFile(@「/ GP_FTP/ans.txt」,@「/ download」);'? –

+0

是的,我認爲問題在那裏,因爲FTP連接建立。如果這不起作用,我不知道下載文件的其他靈魂可能是什麼。 – user5494221

相關問題