예제 #1
0
 public IEnumerable <StreamTransferInfo> GetFileStreams(string folder, string fileMask, bool recursive)
 {
     _setStatus(true);
     // download files
     foreach (var f in ListFiles(folder, fileMask, recursive))
     {
         StreamTransferInfo file = null;
         try
         {
             file = new StreamTransferInfo
             {
                 FileName   = f.FileName,
                 FileStream = client.ReadFile(f.FileName, false)
             };
         }
         catch (Exception ex)
         {
             LastError = ex.Message;
             // skip file
         }
         if (file != null)
         {
             yield return(file);
         }
     }
 }
예제 #2
0
        public IEnumerable <StreamTransferInfo> GetFileStreams(string folder, string fileMask, bool recursive)
        {
            var pattern = String.IsNullOrEmpty(fileMask) ? null : new System.Text.RegularExpressions.Regex(FileTransferHelpers.WildcardToRegex(fileMask), System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Singleline);

            // get files
            List <FtpListItem> files = null;

            for (int i = 0; i < Details.RetryCount; i++)
            {
                // try to open
                if (!Open())
                {
                    continue;
                }
                try
                {
                    // get all files to download, but limit to 2MM
                    files = _listFiles(folder, pattern, recursive).Take(2000000).ToList();
                    _setStatus(true);
                    break;
                }
                catch (Exception ex)
                {
                    _setStatus(ex);
                    // disconnect on error
                    Close();
                    // delay in case of network error
                    System.Threading.Thread.Sleep(Details.RetryWaitMs);
                }
            }

            // sanity check
            if (files == null)
            {
                yield break;
            }

            _setStatus(true);
            // download files
            foreach (var f in files)
            {
                StreamTransferInfo file = null;
                try
                {
                    file = new StreamTransferInfo
                    {
                        FileName   = f.FullName,
                        FileStream = client.OpenRead(f.FullName)
                    };
                }
                catch (Exception ex)
                {
                    LastError = ex.Message;
                    // skip file
                }
                if (file != null)
                {
                    yield return(file);
                }
            }
        }