Скачать архив по FTP с сервера c#

237
22 октября 2017, 19:18

Добрый день, коллеги.

Имеется два метода: один закидывает файлы на сервер, а другой скачивает их с него. Все работает отлично, пока дело не доходит до архивов. Их скачать не получается.

Код метода для скачивания:

private string Download(string Login, string Password, string FileName, string uuid, string FTPDir, string Destination)
        {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + FTPDir + uuid + "/" + FileName);
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.Credentials = new NetworkCredential(Login, Password);
            byte[] buffer = new byte[1024];
            using (var response = (FtpWebResponse)request.GetResponse())
            {
                using (var stream = response.GetResponseStream())
                {
                    using (var fs = new FileStream(Destination, FileMode.OpenOrCreate))
                    {
                        int readCount = stream.Read(buffer, 0, 1024);
                        while (readCount > 0)
                        {
                            fs.Write(buffer, 0, readCount);
                            readCount = stream.Read(buffer, 0, 1024);

                        }
                    }
                    return response.StatusDescription;
                }
            }

Вызов функции:

 string DownloadStatus = FTP.Download("anonymous", "anonymous", "8fff88d9-b4b8-11e7-bfe5-b8ee650e5411.zip", uuid, "ServerPath", @"C:\new_file1.zip");

Создание директории на сервере:

private string CreateFTPDirectory(string Login, string Password, string uuid, string FTPDir)
    {
        FtpWebRequest FTP = (FtpWebRequest)FtpWebRequest.Create("ftp://" + FTPDir + uuid);
        FTP.Credentials = new NetworkCredential(Login, Password);
        FTP.KeepAlive = false;
        FTP.UseBinary = true;
        FTP.Proxy = null;
        FTP.Method = WebRequestMethods.Ftp.MakeDirectory;
        FtpWebResponse resp = (FtpWebResponse)FTP.GetResponse();
        resp.Close();
        return resp.StatusDescription;
    }

Закачка на сервер:

private string Upload(string Login, string Password, string FilePath, string FileName, string uuid, string FTPDir)
    {
        string CreateDirectory = CreateFTPDirectory(Login, Password, uuid, FTPDir);
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + FTPDir + uuid + "/" + FileName);
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.UseBinary = true;
        StreamReader sourceStream = new StreamReader(FilePath + FileName);// Add the file path on the source machine
        byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
        sourceStream.Close();
        request.ContentLength = fileContents.Length;
        using (Stream S = request.GetRequestStream())
        {
            S.Write(fileContents, 0, fileContents.Length);
        }
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        response.Close();
        return response.StatusDescription;
    }

При попытке открыть скаченный архив получаю ошибку: Не удается открыть папку. Сжатая ZIP-папка имеет неверный формат.

Просьба указать на ошибки или мануалы, которые помогут разобраться.

READ ALSO
Как разбить строку на блоки Regex'ами?

Как разбить строку на блоки Regex'ами?

Надо разбить строку на поляПоля выделены кавычками (двойными или одинарными):

254
Возврат значения из JS функции в CefSharp.Wpf

Возврат значения из JS функции в CefSharp.Wpf

Пытаюсь возвратить значение JS функции на странице, загруженной в CEF браузере, используя метод EvaluateScriptAsyncПосетил десятки веб-страниц и документаций,...

421
Задача на многопоточность [требует правки]

Задача на многопоточность [требует правки]

В институте задали задачу по с#Не могу решить ее:

418