예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }