private void ReadAmazonFile(AmazonS3Client s3Client, S3Object item, AmazonS3ConfigDataKeys configKey)
        {
            String[] k        = item.Key.Split("/");
            String   filename = configKey.LocalFileName;

            FileInfo fileInfo = new FileInfo(filename);

            if ((!fileInfo.Exists) || (fileInfo.LastWriteTime < item.LastModified))
            {
                try
                {
                    Task <GetObjectResponse> taskGetObjectResponse = s3Client.GetObjectAsync(AmazonS3Config.GetConfigData.AmazonS3BucketName, item.Key);
                    taskGetObjectResponse.Wait();
                    using (GetObjectResponse getObjRespone = taskGetObjectResponse.Result)
                    {
                        using (Stream responseStream = getObjRespone.ResponseStream)
                        {
                            using (Stream fileStream = File.Create(filename))
                            {
                                CopyStream(responseStream, fileStream);
                                fileStream.Flush();
                                fileStream.Close();
                            }
                        }
                    }
                    File.SetCreationTime(filename, item.LastModified);
                    File.SetLastWriteTime(filename, item.LastModified);

                    string ext = Path.GetExtension(filename).ToLower();
                    if (ext == ".zip")
                    {
                        String strTargetFolder = configKey.LocalFileName;

                        String strFolder = Path.GetDirectoryName(strTargetFolder);
                        ZipFile.ExtractToDirectory(filename, strFolder, true);
                    }
                }
                catch (Exception) {
                }
            }
        }
        /// <summary>
        ///   Download new/Updated AmazonS3 files and return AmazonS3 keys
        /// </summary>
        /// <returns></returns>
        public List <String> FileDownloader()
        {
            List <String> ret = new List <String>();

            try
            {
                using (AmazonS3Client s3Client = GetAmazonS3Client()) {
                    try
                    {
                        ListObjectsRequest request = new ListObjectsRequest();
                        request.BucketName = AmazonS3Config.GetConfigData.AmazonS3BucketName;
                        Task <ListObjectsResponse> task = s3Client.ListObjectsAsync(request);
                        task.Wait();

                        ListObjectsResponse response = task.Result;

                        List <AmazonS3ConfigDataKeys> keys = AmazonS3Config.GetConfigData.Keys;

                        foreach (S3Object item in response.S3Objects)
                        {
                            AmazonS3ConfigDataKeys itemF = keys.FirstOrDefault(o => o.AmazonS3Key == item.Key);
                            try
                            {
                                if (itemF != null)
                                {
                                    ReadAmazonFile(s3Client, item, itemF);
                                }
                                ret.Add(item.Key);
                            }
                            catch (Exception) { }
                        }
                    } catch (Exception)
                    {
                    }
                }
            }
            catch (Exception) { }
            return(ret);
        }