Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 12.04.2015
Сообщений: 3
1

FTP клиент

19.11.2015, 18:41. Показов 1738. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят нужна помощь кто может ответьте, делаю FTP клиент, подключается все нормально, добавил функцию удаления директории Но при удалении выделенной директории выбивает 550 ошибка. Кто может помогите пожалуйста вот прикреплю проект C# WPF VS2015
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
 
 
//using System.Windows.Forms;
 
namespace FtpClient
{
    public partial class MainWindow : Window
    {
        ContextMenu menu = new ContextMenu();
        private string _Host;
 
        //поле для хранения логина
        private string _UserName;
 
        //поле для хранения пароля
        private string _Password;
 
        //объект для запроса данных
        FtpWebRequest ftpRequest;
 
        //объект для получения данных
        FtpWebResponse ftpResponse;
 
        //флаг использования SSL
        private bool _UseSSL = false;
 
        //фтп-сервер
        public string Host
        {
            get
            {
                return _Host;
            }
            set
            {
                _Host = value;
            }
        }
        //логин
        public string UserName
        {
            get
            {
                return _UserName;
            }
            set
            {
                _UserName = value;
            }
        }
        //пароль
        public string Password
        {
            get
            {
                return _Password;
            }
            set
            {
                _Password = value;
            }
        }
        //Для установки SSL-чтобы данные нельзя было перехватить
        public bool UseSSL
        {
            get
            {
                return _UseSSL;
            }
            set
            {
                _UseSSL = value;
            }
        }
        string prevAdress = "ftp://";
 
        public MainWindow()
        {
            InitializeComponent();
        }
        Client client;
        private void btn_connect_Click_1(object sender, RoutedEventArgs e)
        {
            try
            {
                // Создаем объект подключения по FTP
               client = new Client(prevAdress + txt_adres.Text, txt_login.Text, txt_password.Password);
                _Host = txt_adres.Text;
                _UserName = txt_login.Text;
                _Password = txt_password.Password;
                // Регулярное выражение, которое ищет информацию о папках и файлах 
                // в строке ответа от сервера
                Regex regex = new Regex(@"^([d-])([rwxt-]{3}){3}\s+\d{1,}\s+.*?(\d{1,})\s+(\w+\s+\d{1,2}\s+(?:\d{4})?)(\d{1,2}:\d{2})?\s+(.+?)\s?$",
                    RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
                // Получаем список корневых файлов и папок
                // Используется LINQ to Objects и регулярные выражения
                List<FileDirectoryInfo> list = client.ListDirectoryDetails()
                                                     .Select(s =>
                                                     {
                                                         Match match = regex.Match(s);
                                                         if (match.Length > 5)
                                                         {
                                                             // Устанавливаем тип, чтобы отличить файл от папки (используется также для установки рисунка)
                                                             string type = match.Groups[1].Value == "d" ? "folder.png" : "Documents.ico";//"Documents.ico"
                                                             // Размер задаем только для файлов, т.к. для папок возвращается
                                                             // размер ярлыка 4кб, а не самой папки
                                                             string size = "";
                                                             if (type == "Documents.ico")
                                                                 size = (int.Parse(match.Groups[3].Value.Trim()) / 1024).ToString() + " кБ";
                                                             return new FileDirectoryInfo(size, type, match.Groups[6].Value, match.Groups[4].Value, txt_adres.Text);
                                                         }
                                                         else return new FileDirectoryInfo();
                                                     }).ToList();
                // Добавить поле, которое будет возвращать пользователя на директорию выше
                list.Add(new FileDirectoryInfo("", "home.ico", "...", "", txt_adres.Text));
                list.Reverse();
                // Отобразить список в ListView
                lbx_files.DataContext = list;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString() + ": \n" + ex.Message);
            }
        }
 
        private void folder_Click(object sender, MouseButtonEventArgs e)
        {
            if (e.ClickCount >= 2)
            {
                FileDirectoryInfo fdi = (FileDirectoryInfo)(sender as StackPanel).DataContext;
                if (fdi.Type == "folder.png")//1001 ДЕРЕКТОРИЯ
                {
                    prevAdress = fdi.adress;
                    txt_adres.Text = fdi.adress + fdi.Name + "/";
                    btn_connect_Click_1(true, null);
                }
            }
        }
 
        FileDirectoryInfo file;
        private void button_Click_1(object sender, RoutedEventArgs e)
        {
            file = (FileDirectoryInfo)(sender as StackPanel).DataContext;
            string path = file.Name;
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path);
            ftpRequest.Credentials = new NetworkCredential(_UserName, _Password);
            ftpRequest.EnableSsl = _UseSSL;
            ftpRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
            FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            ftpResponse.Close();
            /*lbx_files.Items.Remove(path);*///Кнопка удаления
        }
 
        private void lbx_files_ContextMenuOpening(object sender, ContextMenuEventArgs e)
        {
            string tempstr = lbx_files.Name;
            lbx_files.Name = "";//это нужно только для "Cut"
            ContextMenu menu = new ContextMenu();
            menu.Items.Add("Сохранить файл");
            //menu.Items[0].Click += new EventHandler(RemoveDirectory);
            ////  //  menu.Items.Add("Загрузить файл на сервер");
            ////  //  menu.Items[1].Click += new EventHandler(Upload_File);
            menu.Items.Add("Удалить каталог");
            ////    //menu.Items[2].Click += new EventArgs(RemoveDirectory);
            // menu.Items.Add("Удалить файл");
 
            ////    // menu.Items[3].Click += new EventHandler(Delete_File);
            lbx_files.ContextMenu = menu;
        }
 
        private void button4_Click(object sender, RoutedEventArgs e)
        {
 
        }
        public void DeleteFile(string path)
        {
            ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path);
            ftpRequest.Credentials = new NetworkCredential(_UserName, _Password);
            ftpRequest.EnableSsl = _UseSSL;
            ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
 
            FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            ftpResponse.Close();
        }
 
        //метод протокола FTP MKD для создания каталога на FTP-сервере 
        public void CreateDirectory(string path, string folderName)
        {
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path + folderName);
 
            ftpRequest.Credentials = new NetworkCredential(_UserName, _Password);
            ftpRequest.EnableSsl = _UseSSL;
            ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
 
            FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            ftpResponse.Close();
        }
        //метод протокола FTP RMD для удаления каталога с FTP-сервера 
        public void RemoveDirectory(string path)
        {
            _Host = txt_adres.Text;
           // string filename = path;
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://31.220.16.214/"+_Host + path);
            ftpRequest.Credentials = new NetworkCredential(txt_login.Text, txt_password.Password);
            ftpRequest.EnableSsl = _UseSSL;
            ftpRequest.Method = WebRequestMethods.Ftp.RemoveDirectory;
            FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            ftpResponse.Close();            
        }
 
        private void RemoveDirectory(object sender, RoutedEventArgs e)
        {
            if (lbx_files.SelectedItems == null)
            {
                MessageBox.Show("Выделите файл для удаления");
            }
            try
            {
                string directory = lbx_files.SelectedItems.ToString();
                RemoveDirectory(directory);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            
            if (lbx_files.SelectedItems[0] == null)
            {
                MessageBox.Show("Выделите файл для удаления");
            }
            try
            {
                string directory = lbx_files.SelectedItems.ToString();
                DeleteFile(directory);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        private void lbx_files_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2015, 18:41
Ответы с готовыми решениями:

FTP клиент
Здраствуйте. Может ли ктонибудь подскозать компонент синхронного фтп клиента, а то как бы не искал...

FTP клиент. Переделать с пассивного в активный режим обмена
Всем добрый вечер! Есть FTP клиент, реализующий команды USER, PASS, RETR, STOR, RESt, Quit, LIST и...

Клиент-сервер: Как определить, что клиент отключился?
Привет. Есть клиент и сервер, при подключении клиента, на сервере создается класс, который содержит...

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что...

2
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 812
19.11.2015, 19:36 2
Владислав778, Я в этом не разбираюсь но вот удаляете вы сразу дерикторию? или вначале файлы внутри неё а потом дерикторию? или C# поддерживает сразу удаление директории?
0
0 / 0 / 0
Регистрация: 12.04.2015
Сообщений: 3
19.11.2015, 20:29  [ТС] 3
C# поддерживает удаление директорий и папок
0
19.11.2015, 20:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2015, 20:29
Помогаю со студенческими работами здесь

Клиент-сервер. Клиент не принимает данные
Здравствуйте о светлейшие умы сего мира! Я работаю над одним проектом, а именно написание...

Как сделать чат клиент-клиент
Доброго времени суток! Как сделать чат клиент-клиент? А не как большинство клиент-сервер! Буду рад...

Простая программа клиент - клиент
Хочу написать простую программу для передачи (для начала) сообщений. Кто может что посоветовать?...

Используя системный FTP клиент командной строки загрузите файл на FTP-сервер
Задание: Используя системный FTP клиент командной строки загрузите файл на FTP-сервер. Как это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru