Аналогичное правило действует и при выборе между классами Directory и DirectoryInfo.
2.2 Шаблоны в файлах
Иногда при работе с файлами необходимо или возможно указывать только часть их имени или расширения. Это делается, например, для того, чтобы в параметрах программы не называть полностью имена всех файлов, над которыми производится операция, а выделить их в группу по какому-нибудь признаку (заметим, что некоторые программы работают не с единичными файлами, а с группой). Также бывает необходимо найти файл или файлы, у которых неизвестны полное имя и/или расширения. Для этих целей используют так называемые шаблоны.
Шаблоны представляют собой обычное имя файла (и его расширение) , в котором вместо некоторых букв появляются знаки ?, *, и (в UNIX) []. Знак вопроса указывает на то, что на его месте непременно должен стоять какой-либо допустимый символ имени файла (буква, цифра и т.д.) и причем только дин . Знак *указывает на то, что на его месте может стоять любое количество символов , допустимых в имени файла, а также вообще ничего не стоять . В квадратные скобки заключаются те знаки, один из которыхобязательно должен присутствовать в имени файла на этом месте.
Пример шаблонов.
|
Шаблон |
Соответствие |
|
|
boo?.tmp |
book.tmp, boot.tmp, boo1.tmp идр. |
|
|
boo[tk].tmp |
boot.tmp и book.tmp |
|
|
b*t.t?p |
boot.tep, bat.tmp, bt.tnp и др. |
|
|
[a-c]3.bat |
a3.bat, b3.bat и c3.bat |
Необходимо отметить, что шаблон нельзя начинать со знака *, если он не единственный. В этом случае все символы, стоящие после звездочки игнорируются.
Пример:
|
*t.tmp |
bt.tmp, boo.tmp |
Это связано с недоработкой программного обеспечения.
Также в некоторых реализациях MS-DOS игнорируются все буквы и цифры после знака *. Учитывайте это при составлении шаблонов!
Шаблоны можно указывать и в имени, и в расширении. Он также может состоять из одних только специальных символов. Например:
*.* - шаблон для всех файлов с любым расширением.
???. - все файлы с именем из трех символов без расширения.
*.com - все файлы с расширением com.
*.? -- файлы с расширением из одной буквы.
name.* -- все файлы с именем name и любым расширением.
C.4.4. Резюме.
В данном разделе мы познакомились с шаблонами файлов. Шаблоны широко используются вместо полных имен файлов в параметрах программ, а также используются при просмотре, поиске и сортировке файлов. Правильно задавать шаблон - это своего рода искусство, с помощью которого можно быстро выбрать файлы с нужными параметрами.
|
Символы |
Значение |
|
|
? |
На месте этого знака должен находится один и только один из допустимых символов имени/расширения файла. |
|
|
* |
На месте этого знака должны находится любое количество допустимых символов имени/расширения или не находится ни одного. В некоторых реализациях все следующие за этим знаком символы игнорируются при поиске. |
|
|
[] |
В скобках указывается символы, из которых один обязательно должен присутствовать в имени/расширении. В случае, если символы в скобках записаны через знак тире '-', то допускается присутствие также всех символов, расположенных между ними. |
2.3 Структурная модель
Определив все подзадачи для программы, представим в виде схемы её алгоритмическую декомпозицию:
Структурная модель
Для создания алгоритмической декомпозиции программы необходимо определить в ней подзадачи различных уровней.
На первом этапе разработки диаграммы определим подзадачи, следующие друг за другом:
Вывести стартовую форму (на которой отображены рабочее поле для ввода данных и кнопки выбора действий);
Нажатием различных кнопок выполнять нужные операции.
Закрыть основное окно программы.
3. Структурная схемаалгоритма
4. Текст программы
using System;
using System.Windows.Forms;
using System.IO;//для DirectoryInfo
using System.Diagnostics;//для Process
namespace FileSearchApp
{
publicpartialclassSearchForm : Form
{
int fileCount;//количество найденных файлов
public SearchForm()
{
InitializeComponent();
}
void AddInList(ComboBox cb, string item)
//добавить в список новый элемент исключив повторы
{
int i;
for (i = 0; i < cb.Items.Count; i++)
if (cb.Items[i].ToString().ToUpper() == item.ToUpper())
return;
cb.Items.Add(item);
}
privatevoid btnFind_Click(object sender, EventArgs e)
//поискфайлов
{
try
{
fileCount = 0;//обнуляемсчетчикфайлов
btnClearLB_Click(sender, e);//очищаем поле с предыдущими результатами
string path;
if (tbPath.Text != "")
path = tbPath.Text;
else
path = Directory.GetCurrentDirectory();
tbPath.Text = path;
DirectoryInfo dir = newDirectoryInfo(path);
string file = tbMask.Text;
AddInList(tbMask, file);
AddInList(tbPath, path);
FindInDir(dir, file, cbRecurs.Checked);//поисквзаданнойпапке
_lSearchResult.Text = "Результатыпоиска: найденофайлов " + fileCount.ToString();
}
catch (Exception ex)
{
MessageBox.Show("Ошибкавименифайлаилипутипоиска! [" + ex.Message + "]","Ошибка");
}
}
publicvoid FindInDir(DirectoryInfo dir, string pattern, bool recursive)
//поиск файла в папке
// dir - в какой папке искать
// pattern - маска для поиска
// recursive - поиск во вложенных папках
{
foreach (FileInfo file in dir.GetFiles(pattern))//итератор
{
lbResult.Items.Add(file.FullName);//добавилифайл
fileCount++;//увеличили счетчик
}
if (recursive)//если задан просмотр вложенных папок
{
foreach (DirectoryInfo subdir in dir.GetDirectories())//длякаждойпапки
{
Application.DoEvents();
FindInDir(subdir, pattern, recursive);//рекурсивныйвызов
}
}
}
privatevoid btnBrowse_Click(object sender, EventArgs e)
//выбор пути для начала поиска
{
if (SelectFolderDialog.ShowDialog() == DialogResult.OK)
{
tbPath.Text = this.SelectFolderDialog.SelectedPath;
}
}
privatevoid btnClearLB_Click(object sender, EventArgs e)
//очистка окна вывода результатов
{
lbResult.Items.Clear();
}
privatevoid btnClearAll_Click(object sender, EventArgs e)
//очистка окна вывода результатов и полей ввода
{
tbMask.Text = "";
tbPath.Text = "";
lbResult.Items.Clear();
}
}
}
5. Описание программы
5.1 Назначение программы
Программа предназначена для поиска всех файлов по указанному шаблону в каталогах и подкаталогах заданного пути.
5.2 Описание структуры программы
Глобальная переменнаяfileCount хранит количество найденных файлов.
ФункцияAddInList(cb, item) - добавить в раскрывающийся список новый элемент исключив повторы.
Параметры:
cb - указатель на список ComboBox.
item - добавляемый элемент.
ФункцияbtnFind_Click - поиск файлов.
Функция FindInDir(dir, pattern, recursive) - поискфайлавпапке.
Параметры:
dir - в какой папке искать.
pattern - маска для поиска.
recursive - поиск во вложенных папках.
Функция btnBrowse_Click - выбор пути для начала поиска.
Функция btnClearLB_Click - очистка окна вывода результатов.
ФункцияbtnClearAll_Click - очистка окна вывода результатов и полей ввода.
5.3 Системные требования
Программное обеспечение написано на VisualStudioC# и требует для своего запуска:
Операционную систему семейства Windows одной из версий: Windows XP, Windows 7 или Windows 8.
Минимальные системные требования к программному продукту соответствуют минимальным требованиям к операционной системе:
§ рекомендуется компьютер с процессором, тактовая частота которого составляет не менее 1 ГГц; допустимый минимум - 500 МГц; использоваться могут процессоры семейств Intel Pentium/Celeron, AMD K6/Athlon/Duron, или другие совместимые процессоры.
§ не менее 1 ГБ ОЗУ (допустимый минимум - 512 МБ).
§ 0,1 МБ свободного места на жестком диске (только под исполняемый модуль программы).
§ видеоплата и монитор Super VGA, с разрешением не менее 800600 точек.
§ клавиатура и мышь Microsoft Mouse, или совместимое устройство ввода.
5.4 Инструкция пользователя
Для установки программ на персональный компьютер пользователя, оператору необходимо скопировать загрузочный модуль FileSearch.exeс установочного диска на рабочий стол или в специально созданный каталог. С помощью стандартных процедур графической оболочки Windows вынести пиктограмму на рабочий стол.
Работа программы начинается после запуска пиктограммы FileSearch.exe.
Окно состоит из трех областей (рис. 2):
§ полей ввода маски файла и начального пути поиска;
§ кнопки выбора стартовой папки;
§ флажка задания режима просмотра подкаталогов;
§ области вывода списка найденных файлов;
§ кнопок управления программой.
Главное окно
Последовательность работы с программой:
Нужное имя файла и корневая папка для поиска задаются в соответствующих полях.
Имя папки можно как ввести вручную, так и выбрать с помощью диалога после нажатия кнопки «Обзор…».
Если галочка установлена, то поиск будет происходить также в подпапках. Если нет - то не будет. (По умолчанию галочка стоит).
После нажатия кнопки «Старт» происходит поиск заданного файла в заданной директории.
Если на этом этапе возникает какая либо ошибка (например, не указано имя корневой папки), то выдается сообщение об этом и дальнейший поиск останавливается.
Если в процессе поиска обнаруживаются соответствующие запросу файлы, то они выводятся списком в элемент управления ListBox.
Есть возможность очищать поле результатов. Для этого необходимо нажать кнопку «Очистить».
Чтобы очистить как поле результатов, так и поля с данными для поиска, необходимо нажать кнопку «Очистить все».
При осуществлении нового поиска результаты предыдущего автоматически стираются.
6. Контрольный пример
Результатвыполнения программы
Выводы по работе
В результате выполнения контрольной работы мной была разработана программа поиска файлов на языке программирования С# в среде MSVisualStudio.
Программа позволяет выполнять поиск файлов по заданной спецификации в заданных папках, выводить на экран список найденных файлов и их количество. Управление производится при помощи командных кнопок.
При разработке программного продукта использовалась объектно-ориентированная технология и язык С#. Использование среды разработки Microsoft Visual Studio при программной реализации, позволило создать качественное современное программное обеспечение, обладающее высокой скоростью работы, удовлетворяющее всем уровням требований предъявляемых к интерфейсу пользователя, обеспечивающее эффективность и гибкость работы с данными.
Полученные практические результаты показали правильность составления программы.
Данный программный продукт успешно прошел полное тестирование и отладку, что говорит о соответственном качестве программного продукта.
1. Абрамян М.Э. VisualC# на примерах. -Спб.: БХВ - Петербург, 2008. -496 с.
2. Дэвис Стефан Рэнди, Сфер Чак. С# 2008 для "чайников".: Пер. с англ. -М.: ООО "И.Д. Вильямс", 2008. -576 с.
3. Окулов С.М. Программирование в алгоритмах. -М.: Бином, 2004. -341 с.
4. Пауэрс Л. Microsoft Visual Studio 2008. -СПб.: БХВ-Петербург, 2009. -1200 с.
5. Понамарев В.А. Программирование на С++/С# в VisualStudio.NET. -СПб.: БХВ - Петербург, 2009.-352 с.
6. Шилдт Г. C#: учебный курс. -СПб.: Питер; К.: Издательская группа BHV, 2009. -512 с.
7. http://msdn.microsoft.com/ru-ru/library