C# чтение XML с помощью XmlDocument

Январь 20th, 2012 § 0 comments § Прямая ссылка

В .NET есть целое пространство имен для работы с XML, но среди всего этого изобилия мне было трудно найти простое решение. Конечно, оно существовало, но среди всех этих классов, сразу не разберешься. Тут я представлю несколько способов для работы с XML в C#, для каждой конкретной задачи подходит именно свой, какой решите сами.

Для экспериментов возьмем готовый xml файл, так будет наглядней

<?xml version="1.0" encoding="UTF-8"?>
<GetPriceResearchResponse>
<Ack>Success</Ack>
<ProcessingTime>5.645</ProcessingTime>
<Timestamp>2012-01-20T09:06:26.000Z</Timestamp>
<Version>2</Version>
<CallsRemaining>593</CallsRemaining>
<CallLimitResetTime>2012-02-18T04:31:08Z</CallLimitResetTime>
<Statistics>
<TotalSales currency=dollars>198565.18</TotalSales>
<TotalSoldItems>2889</TotalSoldItems>
<AverageSoldPrice>68.73</AverageSoldPrice>
<MaxSoldPrice>3052.00</MaxSoldPrice>
<MinSoldPrice>0.01</MinSoldPrice>
</Statistics>
</GetPriceResearchResponse>

Continue reading “C# чтение XML с помощью XmlDocument” »

C# работа с реестром

Декабрь 20th, 2011 § 0 comments § Прямая ссылка

Недавно работал с реестром, решил поделиться опытом. В общем, ничего сложного, как и всегда. Здесь опишу основные действия, какие можно выполнять с реестром. Это писать в реестр и читать из него. Для этого импортируйте пространство имен Microsoft.Win32.

Чтение из реестра


using Microsoft.Win32;

RegistryKey readKey = Registry.ClassesRoot.CreateSubKey(".386");
object check = readKey.GetValue("");
readKey.Close();

Этим кодом я прочитал значение по умолчанию в ветке HKEY_CLASSES_ROOT\.386 что бы прочитать другое значение в функции GetValue используем название  поля, которое мы хотим получить. Если такого значения нет то возвращается null

Записб в реестр


RegistryKey saveKey = Registry.ClassesRoot.CreateSubKey(".386");
saveKey.SetValue("", "anothervxdfile");
saveKey.Close();

Этим кодом я задал параметру по умолчанию новое значение, что бы задать параметр с другим значением SetValue(“anotherParam”,”value”). Что хочется заметить первое это то что операции с реестром довольно опасны и при незнании того что делаешь можно благополучно уничтожить систему. Второе это операции, требующие особых привилегий, особенно это касается тех, у кого Vista, Seven и т.д, если вы не Администратор UAC не даст вам что-либо записать или считать. Так что позаботьтесь о том, что бы ваша программа запрашивала права на операции с реестром. Об это я сделаю нотис как это сделать без лишних заморочек с помощью добавления файла манифеста в ПО.

Проблемы с Panel autoscroll WinForms

Декабрь 15th, 2011 § 0 comments § Прямая ссылка

Когда использовал Panel в связке с PictureBox в C# периодически пропадал скролинг, я грешил на Студию. Оказывается нет проблема в особенности Panel так вот если выставить Anchor’ы по всем четырем сторонами то скролинг пропадает. Что бы этого избежать выставляйте Anchor’ы сверху и слева и будем вам счастье. Ссылка на msdn.

Генерация md5 C#

Декабрь 13th, 2011 § 0 comments § Прямая ссылка

Думаю может кому либо пригодится это простая функция для генерации такого сверх популярного хеша. Первая функция для генерации хеша от рандомного числа. Вторая от какого либо текста. Во общем-то по аналогии можно сделать для любых данных главное переводить их в бинарный формат.

using System.Security.Cryptography;

public string GetMD5()
{
Random randNum = new Random();
MD5CryptoServiceProvider md5hash = new MD5CryptoServiceProvider();
byte[] genByte = Encoding.UTF8.GetBytes(randNum.NextDouble().ToString());
byte[] computeHash = md5hash.ComputeHash(genByte);
string result = String.Empty;
foreach (byte currentByte in computeHash)
result += currentByte.ToString("x2");
return result;
}

public string GenMD5(string text)
{
MD5CryptoServiceProvider md5Hash = new MD5CryptoServiceProvider();
byte[] textByte = Encoding.UTF8.GetBytes(text);
byte[] computeHash = md5Hash.ComputeHash(textByte);
string result = String.Empty;
foreach (byte currentByte in computeHash)
result += currentByte.ToString("x2");
return result;
}

Класс для работы с .NET MySQL

Декабрь 8th, 2011 § 2 comments § Прямая ссылка

Решил написать свой класс для работы с MySQL нахожу эту штуку очень полезной т.к. если нужно быстро начать работу с базой данных, то думаю это то что нужно. Можете скачать весь проект и попробовать его в деле. Позже планирую выложить на какой нибудь VCS типа github или bitbucket так что следите за обновлениями поста. Ниже привожу код.

Continue reading “Класс для работы с .NET MySQL” »

Классическая задача “Острова”, выделение однотонных объектов

Декабрь 7th, 2011 § 0 comments § Прямая ссылка

Понравился алгоритм для решения этой задачи, активно используется стек так что он эффективен на не больших данных, либо на не больших связных поверхностях. Типичным способом решения этой задачи это поиск в глубину. Ниже исходник для выделения однотонных объектов на изображении.


class Program
 {
 static void Main(string[] args)
 {
 if (args.Length < 0)
 {
 Console.WriteLine("[*] Input image path");
 return;
 }
 GLOBAL_DATA.Image2Recog = (Bitmap)Bitmap.FromFile(args[0]);
 GLOBAL_DATA.Width = GLOBAL_DATA.Image2Recog.Width-1;
 GLOBAL_DATA.Height = GLOBAL_DATA.Image2Recog.Height-1;
 SamePixelRecognition obj = new SamePixelRecognition();
 obj.FindSameLinkedPixels();
 Console.WriteLine("There is a {0} linked surface in image",GLOBAL_DATA.Count);
 Console.ReadKey();

 }
 }

class GLOBAL_DATA
 {
 public static Bitmap Image2Recog;
 public static int Count=0;
 public static int Width = 0;
 public static int Height = 0;
 public static Color White = Color.FromArgb(255, 255, 255, 255);
 }

class SamePixelRecognition
 {
 public void FindSameLinkedPixels()
 {
 for(int y = 0;y < GLOBAL_DATA.Height; y++)
 for (int x = 0; x < GLOBAL_DATA.Width; x++)
 {
 if (GLOBAL_DATA.Image2Recog.GetPixel(x, y) != GLOBAL_DATA.White)
 {
 Color tmp = GLOBAL_DATA.Image2Recog.GetPixel(x, y);
 RemovePixel(x, y);
 GLOBAL_DATA.Count++;
 }
 }
 }
 private void RemovePixel(int x, int y)
 {
 int[] wayX = {-1,0,1,0 };
 int[] wayY = {0,-1,0,1 };
 int tX;
 int tY;
 GLOBAL_DATA.Image2Recog.SetPixel(x, y, GLOBAL_DATA.White);

 for (int i = 0; i < wayX.Length; i++)
 {
 tX = wayX[i] + x;
 tY = wayY[i] + y;
 if (tX < 0 || tX > GLOBAL_DATA.Width || tY < 0 || tY > GLOBAL_DATA.Height)
 continue;
 if (GLOBAL_DATA.Image2Recog.GetPixel(tX, tY) != GLOBAL_DATA.White)
 this.RemovePixel(tX, tY);
 }
 }
 }

Используется как видите C#, алгоритм решает задачу, на поиск связанных пикселов т.е. тех, которые расположена рядом друг с другом.

C# WebRequest

Октябрь 30th, 2011 § 0 comments § Прямая ссылка

Маленький note на тему, т.к. неприятно провозился около часа. Если установить WebHeaderCollection то значения user-agent и прочие заголовки будут утеряны. Не повторяйте моих ошибок)))

Тригономертия для 2D игр

Сентябрь 12th, 2011 § 0 comments § Прямая ссылка

Немного тригонометрии для 2D игр, первое, что нужно это способы перевода из радианы в углы и из углов в радианы. Листинги будут на C#, но на любой другой язык могу быть перенесены без проблем, я считаю.

Имеем угол в градусах, хотим получить угол в радианах.


radianAngle = GradAngle*(Math.PI/180);

Имеем угол в радианах, хотим получить угол в градусах.


GradAngle=RadianAngle*(180/Math.PI);

Continue reading “Тригономертия для 2D игр” »

Использование XNA в Windows Forms

Сентябрь 5th, 2011 § 0 comments § Прямая ссылка

В этом посте я расскажу как подружить XNA и Windows Forms. Я знаю что сейчас Windows Forms менее актуально, чем тот же WPF, но придет время и я напишу и под WPF. Итак, приступим, у нас есть проект Windows Forms. Первое что нам нужно это подключить  библиотеку XNA, идем в Add Reference и выбираем Microsoft.XNA.Framework. Следует знать, что существует конфликт между пространством имен System.Drawing и Microsoft.XNA.Framework так что вы определенных случая придется указывать полный тип переменной, для того что бы упростить этот процесс воспользуйтесь этим способом using  _Xna=Microsoft.XNA.Framework. Ни чего не могу сказать про XNA 4.0 но под XNA 3.0 тип процессора нужно выставить x86 иначе проект не соберется, имейте это ввиду.

Следующим этапом будет  создание контекста графического устройства, т.е. той поверхности, на которой мы собрались рисовать, для примера это будет сама форма.


public MainForm()
 {
 InitializeComponent();
 Present = new Microsoft.Xna.Framework.Graphics.PresentationParameters();
 Present.BackBufferHeight = this.Height;
 Present.BackBufferWidth = this.Width;
 Present.IsFullScreen = false;
 Device = new Microsoft.Xna.Framework.Graphics.GraphicsDevice(_XnaGraphics.GraphicsAdapter.DefaultAdapter, _XnaGraphics.DeviceType.Hardware, this.Handle, Present);
 this.Texture = _XnaGraphics.Texture2D.FromFile(this.Device, "tile_01.png");
 Sprite = new Microsoft.Xna.Framework.Graphics.SpriteBatch(this.Device);
 }

Continue reading “Использование XNA в Windows Forms” »

Формат вывода даты

Август 24th, 2011 § 0 comments § Прямая ссылка

Сегодня упомяну о формате вывода даты, DateTime, не буду многословным сразу приведу примеры. Первая часть строки это то что передаем в ToString(); DateTime.Now.ToString(“MM/dd/yyyy”);


MM/dd/yyyy  08/22/2006
dddd, dd MMMM yyyy  Tuesday, 22 August 2006
dddd, dd MMMM yyyy  HH:mm Tuesday, 22 August 2006 06:30
dddd, dd MMMM yyyy  hh:mm tt Tuesday, 22 August 2006 06:30 AM
dddd, dd MMMM yyyy  H:mm Tuesday, 22 August 2006 6:30
dddd, dd MMMM yyyy  h:mm tt Tuesday, 22 August 2006 6:30 AM
dddd, dd MMMM yyyy HH:mm:ss  Tuesday, 22 August 2006 06:30:07
MM/dd/yyyy HH:mm  08/22/2006 06:30
MM/dd/yyyy hh:mm tt  08/22/2006 06:30 AM
MM/dd/yyyy H:mm  08/22/2006 6:30
MM/dd/yyyy h:mm tt  08/22/2006 6:30 AM
MM/dd/yyyy h:mm tt  08/22/2006 6:30 AM
MM/dd/yyyy h:mm tt  08/22/2006 6:30 AM
MM/dd/yyyy HH:mm:ss  08/22/2006 06:30:07
MMMM dd  August 22
MMMM dd  August 22
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK  2006-08-22T06:30:07.7199222-04:00
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK  2006-08-22T06:30:07.7199222-04:00
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'  Tue, 22 Aug 2006 06:30:07 GMT
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'  Tue, 22 Aug 2006 06:30:07 GMT
yyyy'-'MM'-'dd'T'HH':'mm':'ss  2006-08-22T06:30:07
HH:mm  06:30
hh:mm tt  06:30 AM
H:mm  6:30
h:mm tt  6:30 AM
HH:mm:ss  06:30:07
yyyy'-'MM'-'dd HH':'mm':'ss'Z'  2006-08-22 06:30:07Z
dddd, dd MMMM yyyy HH:mm:ss  Tuesday, 22 August 2006 06:30:07
yyyy MMMM  2006 August
yyyy MMMM  2006 August

Так же прилагаю pdf взятый отсюда и сслыку на MSDN по теме

Смотреть фильмы онлайн