public void PutFiles(string localDirPath, string remotePath, string filePattern, EPatternStyle patternStyle, bool recursive, FileTransferCallback transferCallback) { _client.PutFiles(localDirPath, remotePath, filePattern, patternStyle, recursive, transferCallback); }
/// <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); }
/// <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); }
/// <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); } }
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; }
/// <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>()); }