C# ftp загрузка файлов из директории

186
09 марта 2018, 12:27

Как реализовать функцию загрузки всех файлов из X директории в Y директорию на ftp.

Я добился, что отправляется один файл. Но есть две проблемы:

1 В директорие очень много файлов под директорий.

2 Если файл уже есть с таким именем, надо затирать новым файлом.

            requestFTPUploader = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1/Destination/" + fileName);
            requestFTPUploader.Credentials = new NetworkCredential("user", "pass");
            requestFTPUploader.Method = WebRequestMethods.Ftp.UploadFile;
            FileInfo fileInfo = new FileInfo(filepath);
            FileStream fileStream = fileInfo.OpenRead();
            int bufferLength = 2048;
            byte[] buffer = new byte[bufferLength];
            try
            {
                Stream uploadStream = requestFTPUploader.GetRequestStream();
                int contentLength = fileStream.Read(buffer, 0, bufferLength);
                while (contentLength != 0)
                {
                    uploadStream.Write(buffer, 0, contentLength);
                    contentLength = fileStream.Read(buffer, 0, bufferLength);
                }
                uploadStream.Close();
                fileStream.Close();
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message.ToString());
            }
            Console.WriteLine(fileName + "Uploaded");

Т.е. нужна функция со входящими параметрами: user, pass, sourceDir, destinationDir. А на выходе скопированные/замещённые файлы на сервер по протоколу ftp.

Answer 1
  1. Очень много файлов? Ну хорошо, значит, будет долго копироваться. Это ведь не проблема?
  2. Используйте WebRequestMethods.Ftp.DeleteFile:

    var requestFtpDeleter = (FtpWebRequest)WebRequest.Create(
                                            "ftp://127.0.0.1/Destination/" + fileName);
    requestFtpDeleter.Credentials = new NetworkCredential("user", "pass");
    requestFtpDeleter.Method = WebRequestMethods.Ftp.DeleteFile;
    using (var response = (FtpWebResponse)requestFtpDeleter.GetResponse())
    {
        bool isSuccessful = response.StatusCode >= 200 && response.StatusCode < 300;
        // исключение при ошибке?
    }
READ ALSO
Считать данные из Region

Считать данные из Region

На форме находится PictureBox, в котором можно перетаскивать изображение путем зажатия левой клавиши мыши, и масштабировать путем прокрутки колесом...

165
Вызов функции С++ из памяти С#

Вызов функции С++ из памяти С#

Здравствуйте! Возникла следующая проблема: появилась необходимость вызвать функцию из приложения, написанного на С++, путём вызова ее из памяти...

154
По поводу загрузки изображения во vue.js

По поводу загрузки изображения во vue.js

Подскажите, как можно загрузить изображение во vuejs без перезагрузки страницы, то есть только добавляю, и отображает на странице мгновенно

268
ios не работает .match

ios не работает .match

В загрузке странички аяксом использую регуляркуВезде работает кроме IOS

315