как сделать Updater

Тема в разделе ".NET", создана пользователем IY@KOV, 16 июн 2007.

  1. IY@KOV

    IY@KOV Гость

    Подскажите пожалуйста:

    У меня есть список файлов. Как мне реализовать их Скачивание из интернета (зная их адрес) на локальный (компьютер пользователся) компьютер???

    какой класс использовать? ничего не находится. заранее спасибо
     
  2. NikSoft

    NikSoft Гость

    Для: IY@KOV
    Если речь идет об html файлах, то можно использовать HttpWebRequest класс
    (http://msdn2.microsoft.com/en-us/library/system.net.httpwebrequest(vs.80,d=printer).aspx).
    Код,реализующий считывание html файла, приводится ниже.

    Код (Text):
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    using System.Net;
    using System.Net.Mail;
    using System.Text;
    using System.Text.RegularExpressions;

    namespace Parser
    {
    public class InternetAffair
    {
    CookieContainer _requestCookieContainer = new CookieContainer();

    #region Properties
    public CookieContainer RequestCookieContainer
    {
    get { return _requestCookieContainer; }
    }

    #endregion

    #region Methods

    public string getHTML(string requestURI)
    {
    HttpWebResponse httpWebResponse = null;
    string       response = "";

    try
    {
    HttpWebRequest httpWebRequest  = (HttpWebRequest)WebRequest.Create(requestURI);
    httpWebRequest.Timeout       = Constants.HttpWebRequestMinTimeOut;
    httpWebRequest.UserAgent        = Constants.UserAgent;
    httpWebRequest.Referer       = Constants.Referer;
    httpWebRequest.CookieContainer = RequestCookieContainer;

    httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

    if (httpWebResponse.StatusCode != HttpStatusCode.OK)
    {
    httpWebResponse.Close(); // Releases the resources of the response.
    ColorConsole.WriteLine(ConsoleColor.White, String.Format("\nWebException\ngetHTML() resp.StatusCode: {0}", httpWebResponse.StatusCode.ToString()));
    }
    else
    {
    StreamReader receiveStream = new StreamReader(httpWebResponse.GetResponseStream());
    response = receiveStream.ReadToEnd();
    receiveStream.Close();
    }
    }
    catch (System.Net.WebException we)
    {
    ColorConsole.WriteLine(ConsoleColor.White, String.Format("\nWebException\ngetHTML() function: {0}\nMessage: {1}", requestURI, we.Message));
    response = Constants.ErrorPage;
    }
    finally
    {
    if (httpWebResponse != null)httpWebResponse.Close();
    }

    return response;
    }

    #endregion
    }
    }
    Пример использования InternetAffair класса

    Код (Text):
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Diagnostics;
    using System.Text;
    using System.Text.RegularExpressions;
    using ParserOfCostkaLib;
    using System.Xml;
    using System.IO;
    using ParserOfCostkaLib.DAL;

    namespace Parser
    {
    public class CreateParser
    {
    #region Private Members
    string       _sourseOfParsing;
    // ...
    #endregion

    #region Properties
    public string SourseOfParsing
    {
    get { return _sourseOfParsing; }
    set { _sourseOfParsing = value; }
    }
    // ...
    #endregion

    #region Methods
    public CreateParserCategories()
    {
    SourseOfParsing = ConfigurationManager.AppSettings["UrlOfRootCategoryAspx"];
    // ...
    }

    public void DoIt()
    {
    try
    {
    InternetAffair internetAffair = new InternetAffair();
    string sourceHTML = internetAffair.getHTML(SourseOfParsing);

    // Строка sourceHTML содержит текст считанного html файла
    // Сейчас его можно каким-то образом обработать или сохранить на диск локальной машины

    }
    catch (XmlException xmlException)
    {
    ColorConsole.WriteLine(ConsoleColor.White, String.Format("\nXmlException\nLineNumber: {0}\nLinePosition:\n {1} \nMessage: {2}", xmlException.LineNumber, xmlException.LinePosition, xmlException.Message));
    }
    catch (Exception e)
    {
    ColorConsole.WriteLine(ConsoleColor.White, String.Format("\nException\nMessage:\n {0} \nStackTrace:\n {1}", e.Message, e.StackTrace));
    }
    finally
    {
    sgmlReader.Close();
    }
    }
    // ...

    #endregion
    }
    }
    Код (Text):
    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace Parser
    {
    public static class ColorConsole
    {

    public static void WriteLine(ConsoleColor color, string textToWrite)
    {
    Console.ForegroundColor = color;
    Console.WriteLine(textToWrite);
    Console.ResetColor();
    }

    public static void BackColor(ConsoleColor color)
    {
    Console.BackgroundColor = color;
    }
    }  

    }
    Код (Text):
    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace Parser
    {
    public sealed class Constants
    {
    static public readonly string  UserAgent = "Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+Q312461)";
    static public readonly string  Referer = "";
    static public readonly int   HttpWebRequestMinTimeOut = 2 * 60 * 1000;
    // ...

    }

    }
    Вот еще ссылка http://msdn2.microsoft.com/en-us/library/s...d=printer).aspx


    Для: IY@KOV
    Надо изменить имя конструктора CreateParserCategories на CreateParser. Это опечатка.
     
  3. IY@KOV

    IY@KOV Гость

    А можно использовать System.Net.WebClient.OpenRead ?
     
  4. NikSoft

    NikSoft Гость

    Для: IY@KOV
    К сожалению, я не работал с System.Net.WebClient.OpenRead.
    Но что тебе мешает поэкспериментировать?
     
  5. NikSoft

    NikSoft Гость

  6. NikSoft

    NikSoft Гость

  7. IY@KOV

    IY@KOV Гость

    О! большое спасибо)

    Мне нужно скачивать любые файлы.
    У меня есть еще вопрос. Когда я использую System.Net.WebClient.OpenRead, то почему-то если я читаю и записываю по порции байтов, то файл сохраняются неправильно. Вот так работает:
    Код (Text):
                    using(Stream data = (new WebClient()).OpenRead(uriServerFile))
    using(FileStream ts = new FileStream(uriClient, FileMode.Create))
    {
    int i = -1;
    byte[] b = new byte[1];
    while(i!=0)
    {
    i = data.Read(b, 0, 1);
    ts.WriteByte(b[0]);
    }
    ts.Flush();

    }
    И еще вопросик
    С помощью какого класса можно узнать размер файла в интернете (т.е. не на компе, где запускается прог-а)
     
  8. NikSoft

    NikSoft Гость

    Для: IY@KOV
    Как насчет этого кода?
    Код (Text):
    WebRequest myWebRequest=WebRequest.Create("uriServerFile");
    WebResponse myWebResponse = myWebRequest.GetResponse();
    long i = myWebResponse.ContentLength;
    myWebResponse.Close();
     
Загрузка...

Поделиться этой страницей