从FTP下载ZIP文件并将其复制到网站内文件夹

3

在从FTP位置复制zip文件时遇到了一些问题。它只是复制了一个空文件,所以我认为我的StreamReader或StreamWriter的使用有问题。

以下是代码:

//read through directory details response
string line = reader.ReadLine();
while (line != null)
{
    if (line.EndsWith("zip")) //"d" = dir don't need "." or ".." dirs
    {
        FtpWebRequest downloadRequest = (FtpWebRequest)FtpWebRequest.Create("ftp://" + ftpHost + line); //new Uri("ftp://" + ftpServerIP + DestinationFolder + fileInf.Name));
        downloadRequest.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["FilesUser"], ConfigurationManager.AppSettings["FilesPass"]);
        downloadRequest.KeepAlive = false;
        downloadRequest.UseBinary = true;
        downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile;

        string folderToWrite = HttpContext.Current.Server.MapPath("~/Routing/RoutingFiles/");
        string folderToSave = HttpContext.Current.Server.MapPath("~/Routing/");

        StreamReader downloadRequestReader = new StreamReader(downloadRequest.GetResponse().GetResponseStream());
        DirectoryInfo downloadDirectory = new DirectoryInfo(folderToWrite);

        FileInfo file = new FileInfo(Path.Combine(downloadDirectory.FullName, line));
        if (!file.Exists)
        {
            StreamWriter writer = new StreamWriter(Path.Combine(folderToWrite, line), false);
            writer.Write(downloadRequestReader.ReadToEnd());

            using (var downloadResponseStream = response.GetResponseStream())
            {
            }
        }
    }
}

到达该部分底部时,文件已被复制但为空,因此我认为我没有正确读取zip文件的流。有任何想法吗?我看到有人谈论使用FileStream下载Zip文件更好,但我也无法使其正常工作。
谢谢。
1个回答

13

下面是一个从ftp下载文件的示例。

try
{
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpAddr + "test.zip");
    request.Credentials = new NetworkCredential(userName, password);
    request.UseBinary = true; // Use binary to ensure correct dlv!
    request.Method = WebRequestMethods.Ftp.DownloadFile;

    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    Stream responseStream = response.GetResponseStream();
    FileStream writer = new FileStream("test.zip", FileMode.Create);

    long length = response.ContentLength;
    int bufferSize = 2048;
    int readCount;
    byte[] buffer = new byte[2048];

    readCount = responseStream.Read(buffer, 0, bufferSize);
    while (readCount > 0)
    {
        writer.Write(buffer, 0, readCount);
        readCount = responseStream.Read(buffer, 0, bufferSize);
    }

    responseStream.Close();
    response.Close();
    writer.Close();

}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

编辑:对于我之前的代码错误,我感到抱歉。

在纠正我的先前代码时,我发现了以下资源很有用:示例


嗨Teletha - 我正在取得进展,但现在出现了一个错误,说“ZipEntry :: ReadDirEntry():Bad signature”,当我尝试进入Zip文件并循环遍历内容时。当我尝试在资源管理器中打开下载的zip文件时,它会弹出一个错误,说“压缩文件...无效”。您难道不需要使用不同的下载方法来下载Zip文件吗? - e-on
你是正确的。它适用于普通文件,我以为它也适用于zip文件。对不起。现在正在寻找解决方案。 - Teletha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接