Поиск по этому блогу

воскресенье, 20 мая 2012 г.

Получаем исходный код страницы

Код не мой, просто нашёл пример, который мне понравился. Вот решил добавить его себе в блог, вдруг пригодится когда - нибудь. По мере изучения исходника программы, понял, что не так и сложно это было написать самому. Но ввиду того, что я не так долго занимаюсь программированием - стараюсь находить, в основном готовые программы, чтобы покапаться в их коде. Сам пишу пока что простенькие программы.
Для начала кидаем на форму две кнопки, один текст бокс(называем его urlTextBox ) и один  richTextBox1. Размещаем это по форме как угодно.
Задача - получить исходный код страницы.
Вот реализация:

        private void button1_Click(object sender, EventArgs e)
        {
            //Программа достаёт исходный код страницы
            //создаём строку url,в которой будем указывать адресс сайта
            string url = urlTextBox.Text;
            //Создаём объект , который будет выполнять запрос к URI(идентификатор ресурса)
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            //GetResponse - возвращает ответ на интернет-запрос
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            //Реализуем считывание символов из потока байтов в определенной кодировке.
            //GetResponseStream -  возвращает поток данных из  интернет-ресурса
            StreamReader sr = new StreamReader(response.GetResponseStream());
            //Читаем поток от начала до конца
            richTextBox1.Text = sr.ReadToEnd();
            //закрываем поток
            sr.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //очишаем поле
            richTextBox1.Clear();
        }

пятница, 18 мая 2012 г.

Быстрая сортировка

Решил уделить больше внимание различным сортировкам на C#. Первая, которую решил осуществить  -  Quick Sort (Быстрая сортировка). Один из быстрых известных универсальных алгоритмов сортировки массивов. Суть алгоритма:
  • из массива выбирается элемент. Как правило, в качестве этого элемента берется центральный элемент массива. 
  • остальные элементы распределяются таким образом, чтобы слева  оказались все элементы, меньшие или равные опорному элементу. Элементы, большие или равные опорному элементу, помещаются справа. 

вторник, 15 мая 2012 г.

Шифр Цезаря

Вот решил на C# написать самостоятельно реализацию шифра Цезаря. Ничего сверхъестественного или сложного не пытался написать. Поэтому реализация получилась очень простой.
Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря — один из самых простых и наиболее широко известных методов шифрования.
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется буквой находящейся на некоторое постоянное число позиций левее или правее него в алфавите. Например, в шифре со сдвигом 3, А была бы заменена на Г, Б станет Д, и так далее.
Пока заставил программу только шифровать, похже добавлю дишифровку.

            Console.WriteLine("Введите слово,которое нужно зашифровать:");
            string s = Console.ReadLine();
            string abc = "abcdefghijklmnopqrstuvwxyz";
            //abc наш алфавит
            Console.WriteLine("Укажите длину сдвига");
            int len = Convert.ToInt32(Console.ReadLine());
            // len  - число сдвигов в сторону
            int a;
            string code = string.Empty;
            for (int i = 0; i < s.Length; i++)
            {
                a = i + len;
                code += abc[a];
            }
            Console.WriteLine(code);
            Console.ReadLine();

пятница, 11 мая 2012 г.

Подсчёт повторных вхождений символов

Задача: написать программу, которая будет подсчитывать сколько раз тот или иной символ повторялся в ведённом предложении. Для решения задачи использовалось регулярное выражение.
Как работает:
  1. вводится предложение
  2. создаётся массив чаров, куда конвертируется это предложение
  3. создаётся массив List
  4. запускается цикл по длине введённого предложения
  5. создаём 2 переменные - одна счётчик, другая равна букве из предложения
  6. проверяем символ на соответствие букве или цифре
  7. если это буква или цифра, то записываем в List
  8. подсчитываем вхождение каждого символа.


            Console.Write("Введите предложение: ");
            string sentence = Console.ReadLine();
            char[] arr_chr = sentence.ToCharArray();
            List<char> charList = new List<char>();
            for (int i = 0; i < sentence.Length; i++)
            {
                char chr = arr_chr[i];
                int includes = 0;
                //это проверка, что символ буква
                // Regex.IsMatch - Указывает, обнаружено ли в указанной входной строке соответствие 
                //заданному регулярному выражению
                if (Regex.IsMatch(chr.ToString(), @"[а-я]|[А-Я]|[A-Z]|[a-z]|[0-9]+$") && !charList.Contains(chr))
                {
                    charList.Add(chr);
                    for (int j = 0; j < sentence.Length; j++)
                        if (chr == arr_chr[j])//подсчитываем вхождения каждого символа
                            includes++;
                    Console.Write(chr.ToString() + "=" + includes + "\t");
                }
            }
            Console.ReadKey(true);

пятница, 4 мая 2012 г.

Получение информации о ПК

Собрал несколько исходных кодов для получения информации о ПК в консольном приложении.
В коде присутствует System.Management. Чтобы его добавить нужно пройти в Solution Explorer, найти там в списке своей программы References, нажать правой кнопкой мыши ->Add->выбрать NET и найти там  System.Management.
В общем сами коды:

Список всех активных процессов в системе

ManagementObjectSearcher searcher =
        new ManagementObjectSearcher("root\\CIMV2",
           "Select Name, CommandLine From Win32_Process");

            foreach (ManagementObject instance in searcher.Get())
            {
                Console.WriteLine("{0}", instance["Name"]);
            }
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey();

четверг, 3 мая 2012 г.

Копирование папки и файлов

Задача: скопировать папку и все файлы, которые находятся в ней.
Решение:

static void Main(string[] args)
        {
            
            CopyFolder( @"d:\__autoSeo_results\temptest", @"d:\__autoSeo_results\tempout" );
            Console.ReadLine();
        }    
        static public void CopyFolder( string sourceFolder, string destFolder )
        {
            // Directory.Exists - Определяет, указывает ли заданный путь на существующий каталог на диске
            if (!Directory.Exists( destFolder ))
                Directory.CreateDirectory( destFolder );
            string[] files = Directory.GetFiles( sourceFolder );
            //Directory.GetFiles - Возвращает имена файлов (с указанием пути к ним) в указанном каталоге
            foreach (string file in files)
            {
                string name = Path.GetFileName( file );
                string dest = Path.Combine( destFolder, name );
                File.Copy( file, dest );
            }
            string[] folders = Directory.GetDirectories( sourceFolder );
            foreach (string folder in folders)
            {
                string name = Path.GetFileName( folder );
                string dest = Path.Combine( destFolder, name );
                CopyFolder( folder, dest );
            }
        }

Перебор символов

Как - то читал статью по брутфорсу и задумался: "А как делать перебор символов?" Долго искал примеры, но они были очень громоздки, и мне их было сложно понять. Вот на днях нашёл более простой пример. Программа последовательно перебирает все возможные комбинации символов и выводит их на экран.


public static IEnumerable EnumLetter(string alphabet)
        {
            foreach (char a in alphabet)
                yield return "" + a;
        }
        public static IEnumerable EnumWord(IEnumerable child, string alphabet)
        {
            foreach (string a in child)
                foreach (string b in EnumLetter(alphabet))
                    yield return "" + a + b;
        }
        static void Main(string[] args)
        {
            
            
            const string alphabet = "abcdefghijklmnopqrstuvwxyz";
            int length = 5;

            IEnumerable list = EnumLetter(alphabet);
            for (int i = 0; i < length - 1; i++)
                list = EnumWord(list, alphabet);
            foreach (string a in list)
                Console.WriteLine(a);
        }
Смысл такой - есть строка "ааааа", программа начинает перебирать символы с последнего символа в этой строке. Т.е. было "ааааа", стало "ааааб", затем "аааав" и так делее. Перебираются все символы в строке.

Получить список избранных ссылок

Нашёл пример как вывести на консоль список избранных ссылок из папки Favorite. Т.е. выводит список ссылок, которые мы сохранили в избранное в Internet Explorer.
Сам код:


const string urlConst = "URL=";
            //указываем путь до папки Избранное
            string pathFavorites = Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
            // Получаем список всех файлов, включая файлы в подпапках
            foreach (String favorite in Directory.GetFiles(pathFavorites, "*", SearchOption.AllDirectories))
            {
                using (StreamReader file = new StreamReader(favorite))
                {
                    while (!file.EndOfStream)
                    {
                        string line = file.ReadLine();

                        if (line.StartsWith(urlConst))
                        {
                            string url = line.Substring(urlConst.Length);
                            string name = Path.GetFileNameWithoutExtension(favorite);
                            Console.WriteLine("NAME='{0}', URL = '{1}'", name, url);
                            break;
                        }
                    }
                }
            }
            Console.ReadKey();

воскресенье, 29 апреля 2012 г.

Про System.IO.Path

Класс .NET System.IO.Path имеет множество статических методов для работы с файлами и путями, которые должны облегчить жизнь)


// Объединяет компоненты имени и пути в один путь
string fullPath = Path.Combine(workingDirectory, fileName);

//если у вас есть полное имя файла, содержащее путь,
string fullPath = "c:\\Downloads\\output\\t0.html";
 
// возвращает "c:\"
string pathPart = Path.GetPathRoot(fullPath);
 
// возвращает "t0.html"
string filePart = Path.GetFileName(fullPath);
 
// возвращает ".html"
string extPart = Path.GetExtension(fullPath);
 
// возвращает "c:\downloads\output"
string dirPart = Path.GetDirectoryName(fullPath);

Генератор паролей на основе RNGCryptoServiceProvider

Увидел в одном блоге, интересный пример генератора паролей. Мне лично такие варианты ещё не попадались. Вот  решил его разместить у себя в блоге.
На форму нужно кинуть Label, 2 TextBox'a, 1 Buttom. Размещаем в любом порядке, а дальше код.


private void button1_Click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(textBox1.Text) < 35)
            {
                try
                {
                    //try говорит о ошибке в определённом куске, чтобы её отловить
                    // Вызов функции или выполнение каких-то иных
                    // действий, которые могут генерировать исключение
                    textBox2.Clear();
                    byte[] temp = Generator.RollDice(Convert.ToInt32(textBox1.Text));
                    for (int i = 0; i < temp.Length; i++)
                    {
                        textBox2.Text += (char)temp[i];
                    }
                }
                catch (Exception ex)
                {
                    //catch - выводит сообщение о ошибке возникшей в try
                    // Сюда управление передается в случае, когда в блоке
                    // try сгенерировано исключение — в самом ли блоке, в
                    // функции, которая в нем вызывается, в функции,
                    // которая вызывается функцией, вызванной в try-блоке
                    // и так далее — словом, где угодно. Объект Exception
                    // описывает ошибку
                    MessageBox.Show(ex.Message);
                }
            }
            else
                MessageBox.Show("Введите число меньше 35!!!");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //по умолчанию в текстбоксе будет стоять значение 16
            textBox1.Text = "16";
        }

Подключение новой формы

Нашёл в инете пример как подключить новую (вторую форму или третью и тд.). Нужно, когда программа подразумевает несколько окон (форм).
P.s. Я понимаю, что это  можно прочесть на MSDN, но проще иметь такие вещи под рукой, а не искать. (у меня лично трудности с поиском на MSDN)


private void button1_Click(object sender, EventArgs e)
{
 Form2 f2 = new Form2(); // создаем
 f2.ShowDialog(); // показываем
}