Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FTP下载文件_C#_.net_Ftp - Fatal编程技术网

C# FTP下载文件

C# FTP下载文件,c#,.net,ftp,C#,.net,Ftp,我正试图用c#从远程机器上用FTP下载文件,但它不起作用。当我使用f10调用GetResponse方法时,抛出了异常。它说:“无法连接到远程服务器”,看起来像是连接问题,但不是 当我在代码ContentType和PreAuthenticate中创建请求时,会抛出一个异常并说:“System.NotSupportedException” 我怎样才能解决这个问题?有什么想法吗 这是FTP的连接信息。 私有静态字符串主机=@”ftp://XXX.XX.XXX.XX/"; 私有静态字符串user=“X

我正试图用c#从远程机器上用FTP下载文件,但它不起作用。当我使用f10调用GetResponse方法时,抛出了异常。它说:“无法连接到远程服务器”,看起来像是连接问题,但不是

当我在代码ContentType和PreAuthenticate中创建请求时,会抛出一个异常并说:“System.NotSupportedException”

我怎样才能解决这个问题?有什么想法吗

这是FTP的连接信息。

私有静态字符串主机=@”ftp://XXX.XX.XXX.XX/";
私有静态字符串user=“XXXXXXXX”;
私有静态字符串pass=“XXXXXXXX”;
私有静态字符串localfile=@“E:/Files/Attachment”;
私有静态字符串remoteFile=@“D:/log/stdlog.6.txt”;
然后是FTP类

公共类FtpServer
{
私有字符串主机=null;
私有字符串user=null;
私有字符串pass=null;
私有FtpWebRequest ftpRequest=null;
私有FtpWebResponse ftpResponse=null;
私有流ftpStream=null;
私有int bufferSize=2048;
/*构造对象*/
公共FtpServer(字符串hostIP、字符串用户名、字符串密码){host=hostIP;user=userName;pass=password;}
公共无效下载(字符串remoteFile、字符串localFile)
{
尝试
{
ftpRequest=(FtpWebRequest)FtpWebRequest.Create(主机+远程文件);
ftpRequest.Credentials=新网络凭据(用户,通过);
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());
}
回来
}
}

无法连接到远程服务器可能有几个原因

1)您可能错误地键入服务器地址并指向不存在的地址

2)服务器暂时关闭或关闭,您无法访问它

3)您为服务器键入了错误的凭据

无论如何,我建议您在代码中实现,而不是在每个流上使用
close()

ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;

    using (ftpResponse = (FtpWebResponse)ftpRequest.GetResponse())
    {
        using (ftpStream = ftpResponse.GetResponseStream())
        {

            using (FileStream localFileStream = new FileStream(localFile, FileMode.Create))
            {

                byte[] byteBuffer = new byte[bufferSize];
                int bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);

                try
                {
                    while (bytesRead > 0)
                    {
                        localFileStream.Write(byteBuffer, 0, bytesRead);
                        bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
                     }
                 }
                 catch (Exception ex)
                 {
                     Console.WriteLine(ex.ToString());
                 }

            }
        }
    }

ftpRequest = null;

我可以看到您在远程路径
D:/log/stdlog.6.txt
中的驱动器号似乎是错误的。通常,ftp服务器有一个“根”目录,您可以根据该目录指定远程路径。你检查过你是否可以使用ftp应用程序下载文件吗?我试过另一种方法。我只使用了文件名,但结果是一样的。使用msdos连接到ftp服务器,然后键入
pwd
查看您的相对路径。“D:\log”不是有效的。您的远程路径应该看起来像
文件夹/filename.txt
和您的本地路径
E:\files\Attachment
您还有另一个问题,您正在定义
ftpRequest.UseBinary=true
但试图下载
.txt
(非二进制文件)。如果你有你的路径正确(我想你没有),一旦下载文件,它将是不可读的。对于
.txt
文件,您应该使用
ftpRequest.UseBinary=false
如果无法使用普通ftp应用程序(应用程序列表:)下载该文件,则很可能无法使用C下载该文件。his
localfile
remoteFile
变量的值都不正确,检查静止注释。顺便说一句,使用建议中+1