FTP文件下载C#

FTP文件下载C#,c#,visual-studio,ftp,C#,Visual Studio,Ftp,在我的代码中,我想从FTP服务器下载一个特定的文件到我的本地机器 System.InvalidCastException:无法将类型为“System.Net.HttpWebRequest”的对象强制转换为FTPapp.ftpdownload.Download处的“System.Net.FtpWebRequest”类型(字符串remoteFile,字符串localFile) 我的代码: 名称空间FTPapp { 公共部分类ftpdownload:表单 { 私有字符串主机=null; 私有字符串us

在我的代码中,我想从FTP服务器下载一个特定的文件到我的本地机器

System.InvalidCastException:无法将类型为“System.Net.HttpWebRequest”的对象强制转换为FTPapp.ftpdownload.Download处的“System.Net.FtpWebRequest”类型(字符串remoteFile,字符串localFile)

我的代码:

名称空间FTPapp
{
公共部分类ftpdownload:表单
{
私有字符串主机=null;
私有字符串user=null;
私有字符串pass=null;
私有字符串SSH=null;
私有FtpWebRequest ftprequest=null;
私有FtpWebResponse ftpresponse=null;
私有流ftpStream=null;
私有int buffersize=2048;
公共ftpdownload()
{
初始化组件();
}
公共ftpdownload(字符串hostIP、字符串用户名、字符串密码、字符串SSHkey)
{
主机=主机IP;
用户=用户名;
pass=密码;
SSH=SSHkey;
}
公共无效下载(字符串remoteFile、字符串localFile)
{
尝试
{
ftprequest=(FtpWebRequest)FtpWebRequest.Create(主机+“/”+远程文件);
ftprequest.Credentials=新的网络凭据(用户、密码、SSH);
ftprequest.UseBinary=true;
ftprequest.UsePassive=true;
ftprequest.KeepAlive=true;
ftprequest.Method=WebRequestMethods.Ftp.DownloadFile;
ftpresponse=(FtpWebResponse)ftprequest.GetResponse();
ftpStream=ftpresponse.GetResponseStream();
FileStream localFileStream=newfilestream(localFile,FileMode.Create);
byte[]byteBuffer=新字节[buffersize];
`在此处输入代码`int bytesRead=ftpStream.Read(byteBuffer,0,buffersize);
尝试
{
而(字节读取>0)
{
localFileStream.Write(byteBuffer,0,bytesRead);
bytesRead=ftpStream.Read(byteBuffer,0,buffersize);
}
}
捕获(例外情况除外)
{
Console.WriteLine(例如ToString());
}
localFileStream.Close();
ftpStream.Close();
ftpresponse.Close();
ftprequest=null;
}
捕获(例外情况除外)
{
Console.WriteLine(例如ToString());
MessageBox.Show(例如Message,“Message”,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
私有void BackgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{
}
私有void Form1\u加载(对象发送方、事件参数e)
{
txtServer.Text=”http://ftpsite.com";
txtUsername.Text=“”;
txtPassword.Text=@;
txtFilename.Text=@;
txtshkey.Text=“”;
}
私有void BtnDownload_单击(对象发送者,事件参数e)
{
ftpdownload ftp=新的ftpdownload(“http://ftpsite.com" ,"","","");
下载(@“远程路径”,“本地路径”);
}
}
}

如果不检查链接,我们无法确定该链接是否为FTP Uri

如中所述,您需要在主机名之前使用
ftp://
,如:
ftp://contoso.com/someFile.txt

那么,如何解决你的问题呢


首先,您应该在链接中添加
ftp://
。之后,您可以创建一个
Uri
对象,并检查其方案是否为
Uri.UriSchemeFtp
。如果不支持,返回。

则表示超时或EnableSsl设置为true,但服务器不支持此功能。如我所述,请在链接开头添加
ftp://
。并在
ftp中指定完整的网站路径。下载
或使用uri类中的uri。