Сайт для программистов

воскресенье, 27 апреля 2008 г.

Как создавать zip-архивы

Каждое утро на моей работе начинается с одной и той же операции. Необходимо скопировать с сервера пять xls-файлов на свой компьютер и заархивировать их в zip-файлы, чтобы выложить их на ftp-сервер. Раньше эту работу делали вручную, но в конце концов мне надоело выполнять одну и ту же последовательность действий и я решил написать для себя небольшую утилитку. Копирование файлов с одного компьютера на другой не представляет интереса, а вот архивирование файлов в zip-формат оказалось не таким простым делом. Пришлось обратиться к помощи Google, чтобы узнать больше об этой проблеме. После непродолжительных поисков я нашел пять различных способов архивации файлов. Например, можно запустить процесс WinZip c необходимыми параметрами. Но у меня на компьютере нет программы WinZip, поэтому такой способ мне не подходит. Существуют более удобные способы для архивации в виде специальных библиотек. Большинство этих библиотек бесплатны и с открытым исходным кодом. Я протестировал часть самых популярных библиотек в своих примерах и решил остановиться на библиотеке DotNet Zip, которую можно найти по адресу http://www.codeplex.com/DotNetZip.
Чтобы воспользоваться этой библиотекой, необходимо добавить ссылку на Ionic.Utils.Zip и написать, например, такой код:
using (ZipFile zip = new ZipFile("MyZipFile.zip")
{
zip.AddFile(@"c:\photos\cat.jpg");
zip.AddFile(@"c:\Desktop\kitty.jpg");
zip.AddFile("ReadMe.txt");
zip.Save();
}
Вы можете скачать готовую библиотеку, исходный код, документацию, инсталлятор. На сегодняшний день библиотека DotNet Zip имет версию 1.3 (есть еще бета-версия 1.4).
Сразу оговорюсь, что я не проверял производительность при архивации файлов разными библиотеками, а также не рассматривал их функциональные возможности. Я решал конкретную задачу и данное решение полностью удовлетворило меня. Теперь работа, которая отнимала у меня полчаса драгоценного времени, выполняется в течении минуты. Сейчас я тестирую программу на предмет отправки файлов на ftp-сервер. Но об этом в следующий раз.
А вам удачного программирования!
Христос воскресе!

воскресенье, 20 апреля 2008 г.

SoundPlayer

В .NET Framework 2.0 появилась поддержка звуковых файлов и теперь не нужно прибегать к услугам функций Windows API PlaySound. Для проигрывания звуковых файлов используется класс SoundPlayer из пространства имен System.Media. Приведу небольшой кусок с использованиме этого класса. Более подробно о новых классах вы можете прочитать в документации MSDN или в моем справочнике по .NET Framework.
using System.Media;
SoundPlayer player = new SoundPlayer();
player.SoundLocation = "c:/tada.wav";
player.Play();

Будьте внимательны, поддержка этого класса в .NET Compact Framework доступна только в версии 3.5.
P.S. Кстати, я обзавелся новым электронным адресом klimoff@csfan.ru. CSFAN - это, наверное, фанат C#. Ну что ж, пусть будет еще один адрес. Можете слать на это мыло свои сообщения. Вы также можете приобрести такой адрес, если пройдете на сайт http://www.mailnica.ru/. На этом сайте Майкрософт предлагает на выбор самые разнообразные адреса, например, дочь танкиста.ру или дайте-денег.ру

понедельник, 14 апреля 2008 г.

Не прислоняться или детская забава

Когда я учился в школе, мне приходилось ездить каждый день на метро, начиная с 5 класса. Чтобы первым успевать к экскалатору или к переходу на другую ветку, я старался держаться около дверей вагона. В течении получаса передо мной маячила надпись Не прислоняться, написанная на каждой двери вагона московского метро. Сначала я смотрел на эту надпись снизу вверх, потом надпись была на уровне моих глаз, а когда заканчивал школу, то смотрел на нее уже свысока))). Чтобы не скучать, я придумал себе простое занятие - составлять слова из букв, входящих в эту надпись. Слова из трех или четырех букв придумать было достаточно просто: стол, слон, нос, сон, лот и т.п. Когда легкие слова закончились, я пытался найти уже более сложные слова. И испытывал радость, когда получалось составить какое-нибудь новое слово. Например, удалось найди шестибуквенные слова типа пистон, пионер. Были даже семибуквенные находки - престол. Позже, когда я увлекся программированием, я поймал себя на мысли - как было бы здорово написать программу, которая сама найдет все существующие варианты. Эта была моя детская мечта. Как хорошо было бы, если эту задачку предложили на олимпиаде для программистов. Так хочется узнать все слова, зашифрованные в этой незамысловатой надписи. Как я себе представляю, эту задачу можно разделить на два этапа. Первый этап - комбинаторная задача, которая сводится к получению всех возможных перестановок букв. Вторая задача - сверка получившихся комбинаций с каким-то большим словарем, чтобы оставить только осмысленные слова. Вот такая у меня была детская забава.