예제 #1
0
        private IEnumerable <FTPEntity> GetTarGzFilesDetail(String ftpUrl)
        {
            List <FTPEntity> result = new List <FTPEntity>();

            try
            {
                var ftpRequester = WebRequest.Create(ftpUrl) as FtpWebRequest;
                if (ftpRequester != null)
                {
                    ftpRequester.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    using (var resonse = ftpRequester.GetResponse())
                    {
                        var responseStream = resonse.GetResponseStream();
                        if (responseStream != null)
                        {
                            using (var streamReader = new StreamReader(responseStream))
                            {
                                var detailAggregatge = streamReader.ReadToEnd();
                                var detailLines      = detailAggregatge.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                                var filesDetailLines = detailLines.Where(x => x.StartsWith("-") && x.EndsWith(".tar.gz"));

                                foreach (var detailLine in filesDetailLines)
                                {
                                    /*
                                     *  -rw-rw-r--    1 919      501      240045532 Dec 04 07:35 Apis_capp_global_20151204-082045.tar.gz
                                     *  -rw-rw-r--    1 919      501      211800045 Dec 03 14:39 Apis_cass_global_20151203-153959.tar.gz
                                     */

                                    String[] majorParts = detailLine.Split(new String[] { "      ", "    " }, StringSplitOptions.RemoveEmptyEntries);

                                    // reprets info like size, date and name
                                    String mainDesription = majorParts.Last();

                                    String[] majorSubParts = mainDesription.Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries);

                                    String   fileName       = majorSubParts[4]; // apis_20151214-211526.tar.gz
                                    String   unformatedDate = fileName.Split('_').Last().Split('-').First();
                                    DateTime date           = DateTime.ParseExact(unformatedDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
                                    String   size           = majorSubParts[0];

                                    FTPEntity ftpEntity = new FTPEntity()
                                    {
                                        FileDate = date,
                                        FileName = fileName,
                                        FileSize = size,
                                        FilePath = Path.Combine(ftpUrl, fileName)
                                    };

                                    if (ftpEntity.FileName.EndsWith(".tar.gz"))
                                    {
                                        result.Add(ftpEntity);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                this.Logger.Error(ftpUrl, e);
            }

            return(result);
        }
예제 #2
0
        private IEnumerable <(String filePath, DateTime date, Byte[] data)> DownloadFiles(FTPEntity ftpEntity)
        {
            try
            {
                var request = (FtpWebRequest)WebRequest.Create(ftpEntity.FilePath);
                request.Timeout          = (int)TimeSpan.FromMinutes(10).TotalMilliseconds;
                request.ReadWriteTimeout = request.Timeout;

                using (var webResponse = (FtpWebResponse)request.GetResponse())
                    using (var responseStream = webResponse.GetResponseStream())
                    {
                        var unziped = UnzipToMemory(originalZipStream: responseStream);

                        return(unziped.Select(x => (x.Key, ftpEntity.FileDate, x.Value)));
                    }
            }
            catch (Exception e)
            {
                this.Logger.Error(ftpEntity.FilePath, e);

                return(Enumerable.Empty <(String, DateTime, byte[])>());
            }
        }