96 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| 
 | |
| namespace AR.FTPClient
 | |
| {
 | |
| 
 | |
|     /// <summary>
 | |
|     ///     ''' Stores a list of files and directories from an FTP result
 | |
|     ///     ''' </summary>
 | |
|     ///     ''' <remarks></remarks>
 | |
|     public class FTPdirectory : List<FTPfileInfo>
 | |
|     {
 | |
|         public FTPdirectory()
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         ///         ''' Constructor: create list from a (detailed) directory string
 | |
|         ///         ''' </summary>
 | |
|         ///         ''' <param name="dir">directory listing string</param>
 | |
|         ///         ''' <param name="path"></param>
 | |
|         ///         ''' <remarks></remarks>
 | |
|         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));
 | |
|             }
 | |
|         }
 | |
|        
 | |
| 
 | |
|         /// <summary>
 | |
|         ///         ''' Filter out only files from directory listing
 | |
|         ///         ''' </summary>
 | |
|         ///         ''' <param name="ext">optional file extension filter</param>
 | |
|         ///         ''' <returns>FTPdirectory listing</returns>
 | |
|         public FTPdirectory GetFiles(string ext = "")
 | |
|         {
 | |
|             return this.GetFileOrDir(FTPfileInfo.DirectoryEntryTypes.File, ext);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         ///         ''' Returns a list of only subdirectories
 | |
|         ///         ''' </summary>
 | |
|         ///         ''' <returns>FTPDirectory list</returns>
 | |
|         ///         ''' <remarks></remarks>
 | |
|         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");
 | |
|         }
 | |
|     }
 | |
| }
 | 
