Mega Code Archive

 
Categories / C# / Network
 

Downloads the file from FTP

using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO; using System.ComponentModel; using System.Xml; using System.Diagnostics; namespace Animaonline.Globals {     [DebuggerNonUserCode]     public class IO     {         #region Network         public class Network         {             #region Constant Variables             const string BYTEORDERMARK = "?";             #endregion             #region Constructors             /// <summary>             /// Initializes a new instance of the <see cref="Network"/> class.             /// </summary>             public Network()             {                 NetworkClient.DownloadFileCompleted += new AsyncCompletedEventHandler(NetworkClient_DownloadFileCompleted);                 NetworkClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(NetworkClient_DownloadProgressChanged);             }             #endregion             #region Event Triggers             /// <summary>             /// Handles the DownloadFileCompleted event of the NetworkClient control.             /// </summary>             /// <param name="sender">The source of the event.</param>             /// <param name="e">The <see cref="System.ComponentModel.AsyncCompletedEventArgs"/> instance containing the event data.</param>             static void NetworkClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)             { if (DownloadFileCompleted != null)DownloadFileCompleted(sender, e); }             /// <summary>             /// Handles the DownloadProgressChanged event of the NetworkClient control.             /// </summary>             /// <param name="sender">The source of the event.</param>             /// <param name="e">The <see cref="System.Net.DownloadProgressChangedEventArgs"/> instance containing the event data.</param>             static void NetworkClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)             { if (DownloadProgressChanged != null)DownloadProgressChanged(sender, e); }             #endregion             #region Members             /// <summary>             /// Provides common methods for sending data to and receiving data from a resource identified by a URI.             /// </summary>             private static WebClient NetworkClient;             #endregion             #region Events             /// <summary>             /// Occurs when an asynchronous file download operation completes.             /// </summary>             public static event AsyncCompletedEventHandler DownloadFileCompleted;             /// <summary>             /// Occurs when an asynchronous download operation successfully transfers some or all of the data.             /// </summary>             public static event DownloadProgressChangedEventHandler DownloadProgressChanged;             #endregion             #region Static Methods             /// <summary>             /// Downloads the file from FTP.             /// </summary>             /// <param name="address">The address.</param>             /// <param name="credentials">The credentials.</param>             /// <param name="fileName">Name of the file.</param>             public static void DownloadFileFromFtp(Uri address, NetworkCredential credentials, string fileName)             {                 FtpWebRequest ftpReq;                 try                 {                     using (FileStream outputStream = new FileStream(fileName, FileMode.Create))                     {                         ftpReq = (FtpWebRequest)FtpWebRequest.Create(address);                         ftpReq.Method = WebRequestMethods.Ftp.DownloadFile;                         ftpReq.UseBinary = true;                         ftpReq.Credentials = credentials;                         FtpWebResponse response = (FtpWebResponse)ftpReq.GetResponse();                         Stream ftpStream = response.GetResponseStream();                         long cl = response.ContentLength;                         int bufferSize = 2048;                         int readCount;                         byte[] buffer = new byte[bufferSize];                         readCount = ftpStream.Read(buffer, 0, bufferSize);                         while (readCount > 0)                         {                             outputStream.Write(buffer, 0, readCount);                             readCount = ftpStream.Read(buffer, 0, bufferSize);                         }                         ftpStream.Close();                         outputStream.Close();                         response.Close();                     }                 }                 catch (Exception DownloadFileException)                 {                     throw DownloadFileException;                 }             }             /// <summary>             /// Downloads the resource with the specified URI to a local file.             /// </summary>             /// <param name="address">The URI from which to download data.</param>             /// <param name="fileName">The name of the local file that is to receive the data.</param>             /// <exception cref="System.Net.WebException"></exception>             /// <exception cref="System.NotSupportedException"></exception>             public static void DownloadFile(Uri address, string fileName) { DownloadFile(address.ToString(), fileName, null); }             /// <summary>             /// Downloads the resource with the specified URI to a local file.             /// </summary>             /// <param name="address">The URI from which to download data.</param>             /// <param name="fileName">The name of the local file that is to receive the data.</param>             /// <exception cref="System.Net.WebException"></exception>             /// <exception cref="System.NotSupportedException"></exception>             public static void DownloadFile(string address, string fileName) { DownloadFile(address, fileName, null); }             /// <summary>             /// Downloads the resource with the specified URI to a local file.             /// </summary>             /// <param name="address">The URI from which to download data.</param>             /// <param name="fileName">The name of the local file that is to receive the data.</param>             /// <exception cref="System.Net.WebException"></exception>             /// <exception cref="System.NotSupportedException"></exception>             public static void DownloadFile(string address, string fileName, string cookie)             {                 using (NetworkClient = new WebClient())                 {                     if (cookie != null)                     {                         NetworkClient.Headers[HttpRequestHeader.Cookie] = cookie;                         NetworkClient.DownloadFile(address, fileName);                     }                     else                     {                         NetworkClient.DownloadFile(address, fileName);                     }                 }             }             /// <summary>             /// Downloads XML Data with the specified URI             /// </summary>             /// <param name="address">The URI from which to download XML data.</param>             /// <exception cref="System.Net.WebException"></exception>             /// <exception cref="System.NotSupportedException"></exception>             /// <exception cref="System.Xml.XmlException"></exception>             public static XmlDocument DownloadXmlDocument(string address) { return DownloadXmlDocument(address, null); }             /// <summary>             /// Downloads XML Data with the specified URI             /// </summary>             /// <param name="address">The URI from which to download XML data.</param>             /// <exception cref="System.Net.WebException"></exception>             /// <exception cref="System.NotSupportedException"></exception>             /// <exception cref="System.Xml.XmlException"></exception>             public static XmlDocument DownloadXmlDocument(string address, string cookie)             {                 XmlDocument xDoc = new XmlDocument();                 using (NetworkClient = new WebClient())                 {                     if (cookie != null)                     {                         NetworkClient.Headers[HttpRequestHeader.Cookie] = cookie;                         string InnerXml = NetworkClient.DownloadString(address);                         #region WebClient HACK - Fixes Byte Order Mark (BOM)                         if (InnerXml.Contains(BYTEORDERMARK))                         {                             InnerXml = InnerXml.Replace(BYTEORDERMARK, string.Empty);                         }                         #endregion                         xDoc.LoadXml(InnerXml);                         return xDoc;                     }                     else                     {                         xDoc.LoadXml(NetworkClient.DownloadString(address));                         return xDoc;                     }                 }             }             /// <summary>             /// Downloads, to a local file, the resource with the specified URI. This method does not block the calling thread.             /// </summary>             /// <param name="address">The URI of the resource to download.</param>             /// <param name="fileName">The name of the file to be placed on the local computer.</param>             /// <exception cref="System.Net.WebException"></exception>             /// <exception cref="System.InvalidOperationException"></exception>             public static void DownloadFileAsync(string address, string fileName) { DownloadFileAsync(new Uri(address), fileName, null); }             /// <summary>             /// Downloads, to a local file, the resource with the specified URI. This method does not block the calling thread.             /// </summary>             /// <param name="address">The URI of the resource to download.</param>             /// <param name="fileName">The name of the file to be placed on the local computer.</param>             /// <exception cref="System.Net.WebException"></exception>             /// <exception cref="System.InvalidOperationException"></exception>             public static void DownloadFileAsync(Uri address, string fileName) { DownloadFileAsync(address, fileName, null); }             /// <summary>             /// Downloads, to a local file, the resource with the specified URI. This method does not block the calling thread.             /// </summary>             /// <param name="address">The URI of the resource to download.</param>             /// <param name="fileName">The name of the file to be placed on the local computer.</param>             /// <exception cref="System.Net.WebException"></exception>             /// <exception cref="System.InvalidOperationException"></exception>             public static void DownloadFileAsync(Uri address, string fileName, string cookie)             {                 using (NetworkClient = new WebClient())                 {                     #region Event Subscription                     NetworkClient.DownloadFileCompleted += NetworkClient_DownloadFileCompleted;                     NetworkClient.DownloadProgressChanged += NetworkClient_DownloadProgressChanged;                     #endregion                     if (cookie != null)                     {                         NetworkClient.Headers[HttpRequestHeader.Cookie] = cookie;                         NetworkClient.DownloadFileAsync(address, fileName);                     }                     else                     {                         NetworkClient.DownloadFileAsync(address, fileName);                     }                 }             }             #endregion         }         #endregion     } }