public List <FtpListItem> ListDirectory(string server, int port, string directory, FTPListType listType, bool recurse, string directoryFilter, string fileFilter) { directory = AdjustPath(server, directory); List <FtpListItem> ret = new List <FtpListItem>(); List <string> directoriesListed = new List <string>(); Regex exclusiveFileFilters = STEM.Sys.IO.Path.BuildExclusiveFilter(fileFilter); Regex inclusiveFileFilters = STEM.Sys.IO.Path.BuildInclusiveFilter(fileFilter); Regex exclusiveDirectoryFilters = STEM.Sys.IO.Path.BuildExclusiveFilter(directoryFilter); Regex inclusiveDirectoryFilters = STEM.Sys.IO.Path.BuildInclusiveFilter(directoryFilter); ListDirectory(server, port, ret, directoriesListed, directory, listType, recurse, exclusiveDirectoryFilters, inclusiveDirectoryFilters, exclusiveFileFilters, inclusiveFileFilters); return(ret); }
void ListDirectory(string server, int port, List <FtpListItem> ftpListItems, List <string> directoriesListed, string directory, FTPListType listType, bool recurse, Regex exclusiveDirectoryFilters, Regex inclusiveDirectoryFilters, Regex exclusiveFileFilters, Regex inclusiveFileFilters) { FtpClient conn = OpenClient(server, port); try { foreach (FtpListItem i in conn.GetListing(directory, FtpListOption.Modify | FtpListOption.Size | FtpListOption.DerefLinks | FtpListOption.AllFiles)) { switch (i.Type) { case FtpFileSystemObjectType.Directory: if (exclusiveDirectoryFilters != null && exclusiveDirectoryFilters.IsMatch(STEM.Sys.IO.Path.GetFileName(i.FullName).ToUpper())) { continue; } if (inclusiveDirectoryFilters != null && !inclusiveDirectoryFilters.IsMatch(STEM.Sys.IO.Path.GetFileName(i.FullName).ToUpper())) { continue; } if (listType == FTPListType.Directory || listType == FTPListType.All) { ftpListItems.Add(i); } if (recurse && !directoriesListed.Contains(i.FullName)) { directoriesListed.Add(i.FullName); ListDirectory(server, port, ftpListItems, directoriesListed, i.FullName, listType, recurse, exclusiveDirectoryFilters, inclusiveDirectoryFilters, exclusiveFileFilters, inclusiveFileFilters); } break; case FtpFileSystemObjectType.File: if (listType == FTPListType.File || listType == FTPListType.All) { if (exclusiveFileFilters != null && exclusiveFileFilters.IsMatch(STEM.Sys.IO.Path.GetFileName(i.FullName).ToUpper())) { continue; } if (inclusiveFileFilters != null && !inclusiveFileFilters.IsMatch(STEM.Sys.IO.Path.GetFileName(i.FullName).ToUpper())) { continue; } ftpListItems.Add(i); } break; case FtpFileSystemObjectType.Link: if (i.LinkObject != null) { switch (i.LinkObject.Type) { case FtpFileSystemObjectType.Directory: if (exclusiveDirectoryFilters != null && exclusiveDirectoryFilters.IsMatch(STEM.Sys.IO.Path.GetFileName(i.LinkObject.FullName).ToUpper())) { continue; } if (inclusiveDirectoryFilters != null && !inclusiveDirectoryFilters.IsMatch(STEM.Sys.IO.Path.GetFileName(i.LinkObject.FullName).ToUpper())) { continue; } if (listType == FTPListType.Directory || listType == FTPListType.All) { ftpListItems.Add(i.LinkObject); } if (recurse && !directoriesListed.Contains(i.LinkObject.FullName)) { directoriesListed.Add(i.LinkObject.FullName); ListDirectory(server, port, ftpListItems, directoriesListed, i.LinkObject.FullName, listType, recurse, exclusiveDirectoryFilters, inclusiveDirectoryFilters, exclusiveFileFilters, inclusiveFileFilters); } break; case FtpFileSystemObjectType.File: if (listType == FTPListType.File || listType == FTPListType.All) { if (exclusiveFileFilters != null && exclusiveFileFilters.IsMatch(STEM.Sys.IO.Path.GetFileName(i.LinkObject.FullName).ToUpper())) { continue; } if (inclusiveFileFilters != null && !inclusiveFileFilters.IsMatch(STEM.Sys.IO.Path.GetFileName(i.LinkObject.FullName).ToUpper())) { continue; } ftpListItems.Add(i.LinkObject); } break; } } break; } } } finally { RecycleClient(conn); } }