public void PutFiles(string localDirPath, string remotePath, string filePattern, EPatternStyle patternStyle, bool recursive, FileTransferCallback transferCallback)
 {
     _client.PutFiles(localDirPath, remotePath, filePattern, patternStyle, recursive, transferCallback);
 }
示例#2
0
 /// <summary>
 /// Transfers all files, matching the given pattern, to the current remote directory. Optionally recursive
 /// </summary>
 /// <param name="localDirectoryName"></param>
 /// <param name="filePattern"></param>
 /// <param name="patternStyle"></param>
 /// <param name="recursive"></param>
 public void PutFiles(string localDirectoryName, string filePattern, EPatternStyle patternStyle, bool recursive)
 {
     PutFiles(localDirectoryName, null, filePattern, patternStyle, recursive, null);
 }
示例#3
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="localDirectoryName"></param>
        /// <param name="remoteDirectoryName"></param>
        /// <param name="filePattern"></param>
        /// <param name="patternStyle"></param>
        /// <param name="recursive"></param>
        /// <param name="transferCallback"></param>
        public void PutFiles(string localDirectoryName, string remoteDirectoryName,
                             string filePattern, EPatternStyle patternStyle, bool recursive,
                             FileTransferCallback transferCallback)
        {
            Regex regex = null;
            if (filePattern != null)
            {
                string fileRegexPattern = GetRegexPattern(filePattern, patternStyle);
                regex = new Regex(fileRegexPattern);
            }

            string previuosDirName = null;
            string currRemoteDirectoryName = remoteDirectoryName;
            if (currRemoteDirectoryName != null)
            {
                previuosDirName = GetCurrentDirectory();
                EnsureDir(currRemoteDirectoryName, transferCallback);
            }
            else
                currRemoteDirectoryName = GetCurrentDirectory();

            string currLocalDirectoryName = localDirectoryName;
            if (currLocalDirectoryName == null || currLocalDirectoryName.Length == 0)
                currLocalDirectoryName = Directory.GetCurrentDirectory();

            string[] dirItems = Directory.GetFiles(currLocalDirectoryName);

            foreach (string itemName in dirItems)
            {
                String fileName = Path.GetFileName(itemName);
                if (regex == null || regex.IsMatch(fileName))
                {
                    string remoteFileName = CombineRemotePath(currRemoteDirectoryName, fileName);
                    PutFile(itemName, remoteFileName, transferCallback);
                }
            }

            if (recursive)
            {
                dirItems = Directory.GetDirectories(currLocalDirectoryName);
                foreach (string itemName in dirItems)
                {
                    string remoteNextDirName = CombineRemotePath(currRemoteDirectoryName, Path.GetFileName(itemName));
                    PutFiles(itemName, remoteNextDirName, filePattern, patternStyle, recursive, transferCallback);
                }
            }

            if (previuosDirName != null)
                SetCurrentDirectory(previuosDirName);
        }
示例#4
0
        /// <summary>
        /// Transfers all files, matching the given pattern, from the given remote directory. Optionally recursive
        /// </summary>
        /// <param name="remoteDirectoryName">Absolute or relative remote path, null indicates the current directory</param>
        /// <param name="localDirectoryName">Absolute local path</param>
        /// <param name="filePattern">May be null to transfer all files</param>
        /// <param name="patternStyle"></param>
        /// <param name="recursive"></param>
        /// <param name="transferCallback"></param>
        /// <remarks>
        /// </remarks>
        public void GetFiles(string remoteDirectoryName, string localDirectoryName,
                             string filePattern, EPatternStyle patternStyle, bool recursive,
                             FileTransferCallback transferCallback)
        {
            Regex regex = null;
            if (filePattern != null)
            {
                string fileRegexPattern = GetRegexPattern(filePattern, patternStyle);
                regex = new Regex(fileRegexPattern);
            }

            string currLocalDirectoryName = localDirectoryName;
            if (currLocalDirectoryName == null || currLocalDirectoryName.Length == 0)
                currLocalDirectoryName = Directory.GetCurrentDirectory();
            else if (!Directory.Exists(currLocalDirectoryName))
            {
                // Create local directory if needed
                Directory.CreateDirectory(currLocalDirectoryName);
                CallTransferCallback(transferCallback, ETransferActions.LocalDirectoryCreated, currLocalDirectoryName, null, 0, null);
            }

            string currRemoteDirectoryName = remoteDirectoryName;
            if (currRemoteDirectoryName == null || currRemoteDirectoryName.Length == 0)
                currRemoteDirectoryName = GetCurrentDirectory();

            IList<DirectoryListItem> dirList = GetDirectoryList(currRemoteDirectoryName);

            // TODO: add SymLink dir recursion check
            CheckSymLinks(currRemoteDirectoryName, dirList);

            foreach (DirectoryListItem item in dirList)
                if (!item.IsDirectory && (regex == null || regex.IsMatch(item.Name)))
                {
                    // Transfer file
                    string localFilePath = Path.Combine(currLocalDirectoryName, item.Name);
                    string remoteFilePath = CombineRemotePath(currRemoteDirectoryName, item.Name);
                    GetFile(remoteFilePath, localFilePath, transferCallback);
                }

            if (recursive)
                foreach (DirectoryListItem item in dirList)
                    if (item.IsDirectory)
                    {
                        // Recursion
                        string localNextDirPath = Path.Combine(currLocalDirectoryName, item.Name);
                        string remoteNextDirPath = CombineRemotePath(currRemoteDirectoryName, item.Name);
                        GetFiles(remoteNextDirPath, localNextDirPath, filePattern, patternStyle, recursive, transferCallback);
                    }
        }
示例#5
0
        private static string GetRegexPattern(string filePattern, EPatternStyle patternStyle)
        {
            string fileRegexPattern = filePattern;

            switch (patternStyle)
            {
                case EPatternStyle.Wildcard:
                case EPatternStyle.Verbatim:
                    fileRegexPattern = "^" + Regex.Escape(filePattern) + "$";
                    if (patternStyle == EPatternStyle.Wildcard)
                        fileRegexPattern = fileRegexPattern.Replace(@"\*", ".*").Replace(@"\?", ".{1}");
                    break;
            }
            return fileRegexPattern;
        }
示例#6
0
 /// <summary>
 /// Transfers all files, matching the given pattern, from the given remote directory. Optionally recursive
 /// </summary>
 /// <param name="remoteDirectoryName">Absolute or relative remote path, null indicates the current directory</param>
 /// <param name="localDirectoryName">Absolute local path</param>
 /// <param name="filePattern">May be null to transfer all files</param>
 /// <param name="patternStyle"></param>
 /// <param name="recursive"></param>
 /// <param name="transferCallback"></param>
 /// <remarks>
 /// </remarks>
 public void GetFiles(string remoteDirectoryName, string localDirectoryName,
     string filePattern, EPatternStyle patternStyle, bool recursive,
     FileTransferCallback transferCallback)
 {
     GetFiles(remoteDirectoryName, localDirectoryName, filePattern, patternStyle, recursive, transferCallback, new List<string>());
 }