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

166
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, в котором можно перетаскивать изображение путем зажатия левой клавиши мыши, и масштабировать путем прокрутки колесом...

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

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

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

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

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

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

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

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

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

299