Torna al Thread
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
public class libFTP
{
public struct DirectoryItem
{
public Uri BaseUri;
public string AbsolutePath
{
get
{
return string.Format("{0}/{1}", BaseUri, Name);
}
}
public bool IsDirectory;
public string Permission;
public string Proprietary;
public DateTime DateCreated;
public string Name;
public int Size;
public List<DirectoryItem> Items;
}
public libFTP()
{
}
public List<DirectoryItem> GetDirectoryInformation(string address, string username, string password,Boolean scanSubDirectory = false)
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(address);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
List<DirectoryItem> returnValue = new List<DirectoryItem>();
string[] list = null;
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
list = reader.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
}
foreach (string line in list)
{
string[] lstLine = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
// Create directory info
DirectoryItem item = new DirectoryItem();
item.BaseUri = new Uri(address);
item.Permission = lstLine[0]; //Permission
if (lstLine[0].ToCharArray()[0] == 'd')
{
item.IsDirectory = true;
item.Size = 0;
}
else {
item.Size = int.Parse(lstLine[4]);
}
item.Proprietary = lstLine[2];
// Windows FTP Server Response Format
// DateCreated IsDirectory Name
string data = line;
// Parse date
string[] mySplit;
mySplit = data.Split(new string[] { lstLine[4] }, StringSplitOptions.RemoveEmptyEntries);
string date = mySplit[1];
mySplit = date.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
date = mySplit[0] +" "+ mySplit[1] +" "+ mySplit[2];
DateTime dateTime = DateTime.Parse(date, System.Globalization.CultureInfo.CreateSpecificCulture("en-US").DateTimeFormat);
item.DateCreated = dateTime;
mySplit = data.Split(new string[] { mySplit[2] }, StringSplitOptions.RemoveEmptyEntries);
// Parse name
string name = mySplit[1].Trim();
item.Name = name;
if (scanSubDirectory == true) {
Console.WriteLine(item.AbsolutePath);
item.Items = item.IsDirectory ? GetDirectoryInformation(item.AbsolutePath, username, password) : null;
}
returnValue.Add(item);
}
return returnValue;
}
}