Представьте, что вы написали программу. Программа хорошая, все пользуются, все довольны. Но подходит момент, когда выходит новая версия. Пользователи об этом ни слухом ни духом. Я предлагаю вам свой вариант решения этой проблемы.
Пример показывает как достать файл по URL, прочитать и обработать. Формат файла выбираем XML. Пример файла:
1 |
<? xml version = "1.0" encoding = "utf-8" ?> |
2 |
< UpdateVersion xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" > |
3 |
< version >2.2</ version > |
4 |
< whatnew >1. Обновлена программа |
5 |
2. Появились новые функции</ whatnew > |
6 |
< url >http://krez0n.org.ua</ url > |
7 |
</ UpdateVersion > |
Названия атрибутов выбраны не просто так. Такие названия как UpdateVersion, version, whatnew, url – соответствуют названию класса и его полям, в которые будут считываться значения.
Наша задача, перевести содержимое файла в объект UpdateVersion, с которым мы можем работать. Ниже представлена функция и класс UpdateVersion, в который заносятся значения из XML файла.
1 |
UpdateVersion uv = null ; |
2 |
public void GetNewVersion() |
3 |
{ |
4 |
//тестовый файл на моем блоге |
5 |
string sUrl = "http://krez0n.org.ua/wp-content/uploads/files/update.xml" ; |
6 |
//потоки для чтения |
7 |
System.IO.Stream st = null ; |
8 |
System.IO.StreamReader sr = null ; |
9 |
//логин и пароль, если требуется установка авторизации на прокси сервере |
10 |
string username = null , password = null ; |
11 |
12 |
try |
13 |
{ |
14 |
//подготавливаем запрос |
15 |
System.Net.WebRequest req = System.Net.WebRequest.Create(sUrl); |
16 |
//т.к. в данном примере логин и пароль пустые, ничего не заносим |
17 |
if (username != null && password != null ) |
18 |
req.Credentials = new System.Net.NetworkCredential(username, password); |
19 |
20 |
//пытаемся получить файл |
21 |
System.Net.WebResponse resp = req.GetResponse(); |
22 |
23 |
//подключаемся к потоку |
24 |
st = resp.GetResponseStream(); |
25 |
//читаем поток.. не забываем про кодировку |
26 |
sr = new System.IO.StreamReader(st, Encoding.Default); |
27 |
28 |
//готовимся к сериализации. Задаем наш тип объекта UpdateVersion |
29 |
XmlSerializer xml = new XmlSerializer( typeof (UpdateVersion)); |
30 |
//проводим десериализацию |
31 |
uv = (UpdateVersion)xml.Deserialize(sr); |
32 |
//если все прошло успешно, то в объекте uv будут храниться все значения |
33 |
//спрашиваем у пользователя что делать дальше |
34 |
if (MessageBox.Show( "Вышла новая версия программы " + Application.ProductName + ": " + uv.version + "\nЧто нового:\n" + uv.whatnew + "\nСкачать новую версию?" , "Новая версия программы" , MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) |
35 |
{ |
36 |
try |
37 |
{ |
38 |
//пытаемся перейти по ссылке открыв браузер |
39 |
Process.Start(uv.url); |
40 |
} |
41 |
catch { } |
42 |
} |
43 |
} |
44 |
catch |
45 |
{ |
46 |
return ; |
47 |
} |
48 |
finally |
49 |
{ |
50 |
//закрываем все потоки |
51 |
if (sr != null ) |
52 |
sr.Close(); |
53 |
54 |
if (st != null ) |
55 |
st.Close(); |
56 |
} |
57 |
} |
58 |
59 |
//класс для сериализации |
60 |
public class UpdateVersion |
61 |
{ |
62 |
public string version; //версия программы |
63 |
public string whatnew; //что нового в программе |
64 |
public string url; //путь к программе |
65 |
} |
Это все, скажем так, основа. Код можно доработать, усложнить. Поставить проверки на ошибки и т.д.
Если что-то не понятно, пишите в комментариях.