using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace AR.FTPClient { /// /// ''' Stores a list of files and directories from an FTP result /// ''' /// ''' public class FTPdirectory : List { public FTPdirectory() { } /// /// ''' Constructor: create list from a (detailed) directory string /// ''' /// ''' directory listing string /// ''' /// ''' public FTPdirectory(string dir, string path) { var lines = dir.Replace("\n","").Split('\r'); foreach (var line in lines) { if (line != "") this.Add(new FTPfileInfo(line, path)); } } /// /// ''' Filter out only files from directory listing /// ''' /// ''' optional file extension filter /// ''' FTPdirectory listing public FTPdirectory GetFiles(string ext = "") { return this.GetFileOrDir(FTPfileInfo.DirectoryEntryTypes.File, ext); } /// /// ''' Returns a list of only subdirectories /// ''' /// ''' FTPDirectory list /// ''' public FTPdirectory GetDirectories() { return this.GetFileOrDir(FTPfileInfo.DirectoryEntryTypes.Directory); } // internal: share use function for GetDirectories/Files private FTPdirectory GetFileOrDir(FTPfileInfo.DirectoryEntryTypes type, string ext = "") { FTPdirectory result = new FTPdirectory(); foreach (FTPfileInfo fi in this) { if (fi.FileType == type) { if (ext == "") result.Add(fi); else if (ext == fi.Extension) result.Add(fi); } } return result; } public bool FileExists(string filename) { foreach (FTPfileInfo ftpfile in this) { if (ftpfile.Filename == filename) return true; } return false; } private const char slash = '/'; public static string GetParentDirectory(string dir) { string tmp = dir.TrimEnd(slash); int i = tmp.LastIndexOf(slash); if (i > 0) return tmp.Substring(0, i - 1); else throw new ApplicationException("No parent for root"); } } }