Projects and Works
Articles » C# + FTP
В Microsoft .Net framework 2.0 и более поздних версиях есть встроенная поддержка FTP. До ее появления необходимо было пользоваться различными библиотеками. Но теперь, гораздо приятнее использовать стандартную библиотеку классов.
Ниже представленный код не описывает все возможности, этой библиотеки, скорее он показывает основные части кода, которые будут использоваться практически везде.
Не забудьте добавить в заголовок:
| using System.Net; using System.IO; |
Общая процедура создания FTP запроса, используя объект FtpWebRequest, выглядиь так:
Объект, FtpWebRequest позволяет настраивать многие нюансы подключения к FTP.
Вот некоторые из свойств объекта FtpWebRequest:
| private void Upload(string filename) { FileInfo fileInf = new FileInfo(filename); string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; FtpWebRequest reqFTP; // Создание объекта FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri( "ftp://" + ftpServerIP + "/" + fileInf.Name)); // Задание логина и пароля reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // По умолчанию KeepAlive установлен как true, поэтому соединение не закрывается после выполнения запроса reqFTP.KeepAlive = false; // Установка команды серверу reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // Установка типа передачи данных reqFTP.UseBinary = true; //Оповещение сервера, о размере загружаемого файла reqFTP.ContentLength = fileInf.Length; // Размер будет – 2 КБ int buffLength = 2048; byte[] buff = new byte; int contentLen; // Открытие файлового потока (System.IO.FileStream) на чтение загружаемого файла FileStream fs = fileInf.OpenRead(); try { // Поток, через который файл уйдет на сервер Stream strm = reqFTP.GetRequestStream(); //Чтение из файла по 2 Кбайта за раз contentLen = fs.Read(buff, 0, buffLength); // пока файл не закончится while (contentLen != 0) { // Запись из потока файла, в поток загрузки на сервер strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // Закрытие потоков strm.Close(); fs.Close(); } catch(Exception ex) { MessageBox.Show(ex.Message, "Upload Error"); } } |
| private void Download(string filePath, string fileName) { FtpWebRequest reqFTP; try { //filePath = <<полный путь к файлу, где он будет сохранен>>, //fileName = <<имя файла>> FileStream outputStream = new FileStream(filePath + "\\\\" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName)); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); long cl = response.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte; readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); } ftpStream.Close(); outputStream.Close(); response.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } |
Другие возможные действия, можно выполнить, используя методы Rename, Delete, GetFileSize, FileListDetails, MakeDir.