private List <File> GetDirectoryInformation(string address) { FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(address); request.Method = WebRequestMethods.Ftp.ListDirectory; request.Credentials = new NetworkCredential(username, password); request.UsePassive = true; request.UseBinary = true; request.KeepAlive = false; List <File> returnValue = new List <File>(); 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) { // Windows FTP Server Response Format // DateCreated IsDirectory Name DateTime dateTime = new DateTime(); // Parse name string name = line; // Create directory info File item = new File(); item.BaseUri = new Uri(address); item.DateCreated = dateTime; item.IsDirectory = name.Contains('.')? false : true; item.Name = name; Console.WriteLine(item.AbsolutePath); item.Items = item.IsDirectory ? GetDirectoryInformation(item.AbsolutePath) : null; returnValue.Add(item); } return(returnValue); }
private void DownloadSingleFile(File file, string destination) { byte[] buffer = new byte[2048]; int bytesRead = 0; FtpWebRequest request = CreateFtpWebRequest(file.AbsolutePath, true); request.Method = WebRequestMethods.Ftp.DownloadFile; Stream reader = request.GetResponse().GetResponseStream(); FileStream fileStream = new FileStream(destination + "/" + file.Name, FileMode.Create); double alreadyDownloaded = 0.0f; //Get from List of Sizes from method below //double fileLength = GetSizeSingleFile(file.AbsolutePath); while (true) { bytesRead = reader.Read(buffer, 0, buffer.Length); if (bytesRead == 0) { break; } fileStream.Write(buffer, 0, bytesRead); alreadyDownloaded += bytesRead; //double percentDone = (alreadyDownloaded / file.Size) * 100.0; OnFileDownloadUpdate(new FileDownloadUpdateArgs() { CurrentFileSize = file.Size, CurrentFileDownloadedSize = alreadyDownloaded, FileDownloadedSize = alreadyDownloaded }); } fileStream.Close(); }
private List <File> GetDirectoryInformationDetails(string address) { 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 <File> returnValue = new List <File>(); 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) { // Windows FTP Server Response Format // DateCreated IsDirectory Name string data = line; string date = null; DateTime dateTime = new DateTime(); string dir = null; bool isDirectory = false; try { // Parse date date = data.Substring(0, 17); dateTime = DateTime.Parse(date); data = data.Remove(0, 24); // Parse <DIR> dir = data.Substring(0, 5); isDirectory = dir.Equals("<dir>", StringComparison.InvariantCultureIgnoreCase); data = data.Remove(0, 5); data = data.Remove(0, 10); } catch { // Parse <DIR> dir = data.Substring(0, 5); isDirectory = dir.Equals("<dir>", StringComparison.InvariantCultureIgnoreCase); data = data.Remove(0, 5); data = data.Remove(0, 10); // Parse date date = data.Substring(0, 17); dateTime = DateTime.Parse(date); data = data.Remove(0, 24); } // Parse name string name = data; // Create directory info File item = new File(); item.BaseUri = new Uri(address); item.DateCreated = dateTime; item.IsDirectory = isDirectory; item.Name = name; Console.WriteLine(item.AbsolutePath); item.Items = item.IsDirectory ? GetDirectoryInformation(item.AbsolutePath) : null; returnValue.Add(item); } return(returnValue); }