Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 如何在C中从Ftp下载Zip文件#_C#_Ftp - Fatal编程技术网

C# 如何在C中从Ftp下载Zip文件#

C# 如何在C中从Ftp下载Zip文件#,c#,ftp,C#,Ftp,我必须使用c代码从ftp下载zip文件。 我使用了以下代码 Uri url = new Uri("ftp://ftpurl"); if (url.Scheme == Uri.UriSchemeFtp) { FtpWebRequest objRequest = (FtpWebRequest)FtpWebRequest.Create(url); //Set credentials if required

我必须使用c代码从ftp下载zip文件。 我使用了以下代码

        Uri url = new Uri("ftp://ftpurl");
        if (url.Scheme == Uri.UriSchemeFtp)
        {

            FtpWebRequest objRequest = (FtpWebRequest)FtpWebRequest.Create(url);
            //Set credentials if required else comment this Credential code
            NetworkCredential objCredential = new NetworkCredential(userid, Pwd);
            objRequest.Credentials = objCredential;
            objRequest.Method = WebRequestMethods.Ftp.DownloadFile;

            FtpWebResponse objResponse = (FtpWebResponse)objRequest.GetResponse();

            StreamReader objReader = new StreamReader(objResponse.GetResponseStream());
            byte[] buffer = new byte[16 * 1024];
            int len = 0;
            FileStream objFS = new FileStream(@"E:\ftpwrite", FileMode.Create, FileAccess.Write, FileShare.Read);
            while ((len = objReader.BaseStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                objFS.Write(buffer, 0, len);
            }
            objFS.Close();
            objResponse.Close();

        }
但这段代码没有给我正确的响应,因为我想从ftp保存文件,而这段代码正在将文件中的数据以字节的形式写入我的文件。 我的文件是zip文件而不是文本文件。 请帮助我该怎么做,否则我会误解。

我猜这与您使用的是
StreamReader
有关。在构造过程中,它可能从流中读取数据,以尝试确定编码。因为您并没有真正使用它—只是
基本流
—它毫无意义,并且会导致代码不清晰

只需使用:

Stream inputStream = objResponse.GetResponseStream();
此外,您应该对所有流和响应使用
using
语句


哦,如果您使用的是.NET 4或更高版本,请使用
Stream.CopyTo
节省一些时间。

如果您不反对使用免费的第三方库,您可以使用

这使得访问FTP变得简单多了。示例代码(取自并稍微修改了其代码):


为什么要使用
StreamReader
?您不是直接从它读取数据,而是从它的
基流
读取数据。为什么不直接使用流呢?你需要更具体一些,“没有给我正确的回答”还不够清楚。出什么事了?您没有得到完整的文件吗?我不确定是否正确理解了问题,但您是否尝试了E:\ftpwrite.zip?
using (FTPConnection ftp = new FTPConnection())
{
    ftpConnection.ServerAddress = "myserver";
    ftpConnection.UserName = userName;
    ftpConnection.Password = password; 
    ftpConnection.Connect();
    ftpConnection.DownloadFile(localFilePath, remoteFileName);
}