Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

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

#c_sharp #ftp


Как реализовать функцию загрузки всех файлов из 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.
    


Ответы

Ответ 1



Очень много файлов? Ну хорошо, значит, будет долго копироваться. Это ведь не проблема? Используйте 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; // исключение при ошибке? }

Комментариев нет:

Отправить комментарий