Monday, 14 March 2016

Download file from FTP server using C# (async and await)

// to download file from FTP server.
  
   private async void button1_Click(object sender, EventArgs e)
        {
         
            try
            {
                bool blnfilestatus = await FileDeleteAndCopy(); // to copy file and delete from folder "Refer my old post copy file and delete"
                bool CheckStatus = true;
                if (blnfilestatus == true)
                {
                    label1.Text = "Reading file from FTP server";
                    string lstrFTPServerPath = "ftp://172.11.11.11/Employee.xlsx";
                    string localPath = @"G:\New\";
                    string fileName = "Employee.xlsx";
                 
                    FtpWebRequest requestFileDownload = (FtpWebRequest)WebRequest.Create(lstrFTPServerPath);
                    requestFileDownload.Credentials = new NetworkCredential("UserName", "Password");
                    requestFileDownload.Method = WebRequestMethods.Ftp.DownloadFile;
                    FtpWebResponse responseFileDownload = (FtpWebResponse)requestFileDownload.GetResponse();
                    Stream responseStream = responseFileDownload.GetResponseStream();

                    FileStream writeStream = new FileStream(localPath + fileName, FileMode.Create, FileAccess.ReadWrite,
                    FileShare.ReadWrite, bufferSize: 4096, useAsync: true);

                    int Length = 4096; // size of file 4MB only
                    Byte[] buffer = new Byte[Length];
                    int bytesRead = await responseStream.ReadAsync(buffer, 0, Length);
                    while (bytesRead > 0)
                    {
                        await writeStream.WriteAsync(buffer, 0, bytesRead);
                        //bytesRead = responseStream.Read(buffer, 0, Length);
                        bytesRead =await responseStream.ReadAsync(buffer, 0, Length); // Read file using await keyword 
                    }
                    responseStream.Close();
                    writeStream.Close();
                    requestFileDownload = null;
                    responseFileDownload = null;
                    label1.Text = "Done !";
                    string FilePathafterUpdate = localPath + "\\" + fileName;
                    FileInfo fiinfo = new FileInfo(localPath + "\\" + fileName);
                    if (fiinfo.Exists)
                    {
                        label1.Text = "Checking file exists in directory";
                        if (fiinfo.CreationTime < DateTime.Now && fiinfo.CreationTime > DateTime.Now.AddMinutes(-1)) // for checking file is crated in folder or not just before 1 min ago.its depend on your requirement you can use what you want 
                        {
                            if (fiinfo.Extension == ".xlsx" || fiinfo.Extension == ".xls")
                            {
                             
                                 // write your code.
                                 
                                   
}
                           
                        }
                    }
                    else
                    {
                        label1.Text = "File not found at target location !";
                     
                    }
                }
                else
                {
                    label1.Text = "Not able to move file from target to source folder";
                }
            }
            catch (Exception ex)
            {
                ErrorLog(ex.Message.ToString());
            }
        }

1 comment:

  1. when i use this code i got error "Unable to Connect Remote Server"

    ReplyDelete