我试图进行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");
如果尚未分配变量,则无法对它执行操作-然后得到
NullReferenceException
。 new
位首先出现:client = new FTPManagerClass("usr", "pwd", "ftp://ftp.tzf.com");
client.DownloadFile(@"/GP_FTP/ans.txt", @"/download");
在尝试下载文件之前,指定ftp地址并发送用户名,密码也应该更有意义。