In this post we are going to see how to upload a file using FTP in Windows Form application. In our previous post we have install and configure FTP Server on IIS 10. Now we are going to create a sample application to connect the FTP server including below operations:
- List FTP Server Directory Files
- Create Directory
- Check Existing Directory
- Upload Files to FTP Server Directory
- Delete File from FTP Server
Please overview previous post if you are new to FTP Server configuration: https://shashangka.com/2019/02/08/install-configure-ftp-server-on-iis-10
List FTP Server Directory Files:
ListgetDirectoryFiles() { FtpWebRequest ftpRequest = null; List resultlistFile = null; try { strHostName = txtHost.Text.Trim(); strUserName = txtusername.Text.Trim(); strPassword = txtPassword.Text.Trim(); strPort = txtPort.Text.Trim(); if ((strHostName != string.Empty) && (strUserName != string.Empty) && (strPassword != string.Empty)) { //FTP Request string _strHostName = strHostName + "/" + strHostdest; ftpRequest = (FtpWebRequest)FtpWebRequest.Create(_strHostName); ftpRequest.Credentials = new NetworkCredential(strUserName, strPassword); ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; ftpRequest.UseBinary = true; ftpRequest.KeepAlive = false; ftpRequest.UsePassive = true; ftpRequest.Timeout = Int32.MaxValue; ftpRequest.ReadWriteTimeout = Int32.MaxValue; ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); //Read Directory string[] listFile = null; using (StreamReader reader = new StreamReader(ftpResponse.GetResponseStream())) { string strFiles = reader.ReadToEnd(); listFile = strFiles.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); } if (listFile.Length > 0) { resultlistFile = new List (); int i = 0; foreach (string file in listFile) { i++; //GET FileInformation string filename = file; filename = filename.Remove(0, 24); filename = filename.Trim(); string[] fileinfo = filename.Split(' '); if (fileinfo.Length > 2) { string _filename = string.Empty; for (int j = 1; j < fileinfo.Length; j++) { _filename += fileinfo[j] + ' '; } filename = _filename; } else { filename = fileinfo[1]; } string filesize = ToFileSize(Convert.ToDouble(fileinfo[0])); string date = file.Substring(0, 17); //SET FileInformation Fileinfo item = new Fileinfo() { Id = i, DateCreated = DateTime.Parse(date), Filename = filename, Filesize = filesize }; resultlistFile.Add(item); } } } } catch (Exception ex) { MessageBox.Show("Connection Error!!", "Message"); ex.ToString(); } finally { if (ftpRequest != null) { ftpRequest = null; } if (ftpResponse != null) { ftpResponse.Close(); } } return resultlistFile; }
Upload Files to FTP Server Directory:
void FtpUploadFile(Fileinfo file) { FtpWebRequest ftpRequest = null; FileStream filestream = null; Stream stream = null; try { currentPosition = 0; totalTransfered = 0; size = 0; transferRate = 0; FileInfo fileInfo = new FileInfo(file.Filesource); size = fileInfo.Length; progbarFtp.Minimum = 0; progbarFtp.Maximum = 100; long currentSize = 0; long incrementSize = (size / 100); string _strHostName = strHostName + "/" + file.Filedestination; filestream = new FileStream(file.Filesource, FileMode.Open, FileAccess.Read); ftpRequest = FtpWebRequest.Create(_strHostName) as FtpWebRequest; ftpRequest.Method = WebRequestMethods.Ftp.UploadFile; ftpRequest.Credentials = new NetworkCredential(strUserName, strPassword); ftpRequest.UseBinary = true; ftpRequest.KeepAlive = false; ftpRequest.UsePassive = true; ftpRequest.Timeout = Int32.MaxValue; ftpRequest.ReadWriteTimeout = Int32.MaxValue; stream = ftpRequest.GetRequestStream(); const int bufferLength = (1 * 1024); byte[] buffer = new byte[bufferLength]; int read = 0; while ((read = filestream.Read(buffer, 0, buffer.Length)) != 0) { stream.Write(buffer, 0, read); currentSize += read; totalTransfered += read; transferRate = read; if (currentSize >= incrementSize) { currentSize -= incrementSize; progbarFtp.Invoke(new updatebar(this.UpdateProgress)); } } stream.Flush(); } catch (Exception ex) { MessageBox.Show("Connection Error!!", "Message"); ex.ToString(); } finally { if (filestream != null) { filestream.Close(); filestream.Dispose(); } if (stream != null) { stream.Close(); stream.Dispose(); } if (ftpRequest != null) { ftpRequest = null; } if (ftpResponse != null) { ftpResponse.Close(); } } }
Create Directory:
void createDirectory() { FtpWebRequest ftpRequest = null; try { string _strHostName = strHostName + "/" + strHostdest; ftpRequest = (FtpWebRequest)WebRequest.Create(_strHostName); ftpRequest.Credentials = new NetworkCredential(strUserName, strPassword); ftpRequest.UseBinary = true; ftpRequest.KeepAlive = false; ftpRequest.UsePassive = true; ftpRequest.Timeout = Int32.MaxValue; ftpRequest.ReadWriteTimeout = Int32.MaxValue; ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory; ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); } catch (Exception ex) { MessageBox.Show("Connection Error!!", "Message"); ex.ToString(); } finally { if (ftpRequest != null) { ftpRequest = null; } if (ftpResponse != null) { ftpResponse.Close(); } } }
Check Existing Directory:
bool isDirectoryExist() { FtpWebRequest ftpRequest = null; try { string _strHostName = strHostName + "/" + strHostdest; ftpRequest = (FtpWebRequest)WebRequest.Create(_strHostName); ftpRequest.Credentials = new NetworkCredential(strUserName, strPassword); ftpRequest.UseBinary = true; ftpRequest.KeepAlive = false; ftpRequest.UsePassive = true; ftpRequest.Timeout = Int32.MaxValue; ftpRequest.ReadWriteTimeout = Int32.MaxValue; ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory; ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); return true; } catch (WebException ex) { ex.ToString(); return false; } finally { if (ftpRequest != null) { ftpRequest = null; } if (ftpResponse != null) { ftpResponse.Close(); } } }
Delete File from FTP Server:
void deleteFile() { FtpWebRequest ftpRequest = null; try { string _strHostName = strHostName + "/" + strHostdest + "/" + SelectedFile; ftpRequest = (FtpWebRequest)FtpWebRequest.Create(_strHostName); ftpRequest.Credentials = new NetworkCredential(strUserName, strPassword); ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile; ftpRequest.UsePassive = true; ftpRequest.UseBinary = true; ftpRequest.KeepAlive = false; ftpRequest.Timeout = Int32.MaxValue; ftpRequest.ReadWriteTimeout = Int32.MaxValue; ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); fillGrid(); SelectedFile = string.Empty; btnCancel.Text = "Cancel"; } catch (Exception ex) { MessageBox.Show("Connection Error!!", "Message"); ex.ToString(); } finally { if (ftpRequest != null) { ftpRequest = null; } if (ftpResponse != null) { ftpResponse.Close(); } } }
Download/clone full source code from , Thanks 🙂
References:
- https://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Class
says:
I was suggested this web site by means of my cousin. I
am now not positive whether or not this post is written by way of him as
nobody else recognize such specific about my problem.
You are wonderful! Thanks!