Создание поисковой системы файлов в среде MS Visual Studio
Возможности языка С и среды программирования Visual Studio при работе с файлами и каталогами. Проект программы для поиска файлов по заданной маске и заданному пути. Способы получения списка файлов по указанной спецификации и подсчета их количества.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 13.12.2018 |
Размер файла | 456,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов - языков программирования. Смысл появления такого языка - оснащенный набор вычислительных формул дополнительной информации, превращает данный набор в алгоритм. программирование файл каталог маска
Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько «близок к машине», что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько «близок к решаемой задаче», чтобы концепции ее решения можно было выражать прямо и коротко.Язык предоставляет программисту набор концептуальных инструментов.
Можно писать программы непосредственно на машинном языке, хотя это и сложно. Для спасения программистов от сурового машинного языка программирования, были созданы языки высокого уровня, которые стали своеобразным связующим мостом между человеком и машинным языком компьютера. Языки высокого уровня работают через трансляционные программы, которые вводят исходный код, и в конечном итоге заставляет компьютер выполнять соответствующие команды, которые даются на машинном языке.
Целью данной курсовой работы является создание программы на языке С# для поиска файлов по заданной маске.
Данная тема актуальна, т.к. поиск файлов является неотъемлемой частью многих системных программ - файловых менеджеров, программ - архиваторов и пр.
Для достижения поставленной цели необходимо решить следующие задачи:
§ рассмотреть возможности языка С# и среды программирования VisualStudio при работе с файлами и каталогами;
§ спроектировать программу для поиска файлов по заданной маске и заданному пути.
Задание на курсовую работу
Разработать программу, выводящую на экран монитора информацию обо всех директориях и файлах, удовлетворяющих заданному шаблону:
[накопитель] [маршрут] имя_файла [расширение]
Для решение поставленной задачи поиска файлов необходимо задать:
§ имя файла или маску;
§ имя папки в которой будет выполняться поиск/
В результате выполнения программы будут получены список файлов по указанной спецификации и их количество (если файлов не найдено, то список будет пуст и количество равно 0).
1. Выбор языка программирования
Совокупность средств, с помощью которых программы пишутся, корректируются, преобразуются в машинные коды, отлаживаются и запускаются, называют средой разработки или оболочкой. Платформа .Net или .Net Framework - это больше чем просто среда разработки программ, это новое революционное объединение ранее разрозненных технологий компанией Microsoft, которые позволяют разрабатывать разнотипные приложения на различных языках программирования под различные операционные системы.
.NET Framework является надстройкой над операционной системой, в качестве которой может выступать любая версия Windows, Unix и вообще любая ОС (по заверению разработчиков), и состоит из ряда компонентов. Так, .NET Framework включает в себя:
1. Четыре официальных языка: С#, VB.NET, Managed C++ и JScript .NET.
2. Общеязыковую объектно-ориентированную среду выполнения CLR (Common Language Runtime), совместно используемую этими языками для создания приложений.
3. Ряд связанных между собой библиотек классов под общим именем FCL (Framework Class Library).
Основным компонентом платформы .NET Framework является общеязыковая среда выполнения программ CLR. Название среды - "общеязыковая среда выполнения" - говорит само за себя: это исполняющая среда, которая подходит для различных языков программирования. К функциям CLR относятся:
1. двухшаговая компиляция: преобразование программы, написанной на одном из языков программирования в управляемый код на промежуточном языке (Microsoft Intermediate Language, MSIL, или просто IL), а затем преобразование IL-кода в машинный код конкретного процессора, который выполняется с помощью виртуальной машины или JIT-компилятора (Just In Time compiler - компилирование точно к нужному моменту);
2. управление кодом: загрузка и выполнение уже готового IL-кода с помощью JIT-компилятора;
3. осуществление доступа к метаданным с целью проверки безопасности кода;
4. управление памятью при размещении объектов с помощью сборщика мусора (Garbage Collector);
5. обработка исключений и исключительных ситуаций, включая межъязыковые исключения;
6. осуществление взаимодействия между управляемым кодом (код, созданный для СLR) и неуправляемым кодом;
7. поддержка сервисов для разработки разнотипных приложений.
Следующим компонентом .Net Framework является FCL - библиотека классов платформы. Эта библиотека разбита на несколько модулей таким образом, что имеется возможность использовать ту или иную ее часть в зависимости от требуемых результатов. Так, например, в одном из модулей содержатся "кирпичики", из которых можно построить Windows-приложения, в другом - "кирпичики", необходимые для организации работы в сети и т.д.
Часть FCL посвящена описанию базисных типов. Тип - это способ представления данных; определение наиболее фундаментальных из них облегчает совместное использование языков программирования с помощью .NET Framework. Все вместе это называется Common Type System (CTS - единая система типов).
Кроме того, библиотека FCL включает в себя Common Language Specification (CLS - общая языковая спецификация), которая устанавливает: основные правила языковой интеграции. Спецификация CLS определяет минимальные требования, предъявляемые к языку платформы .NET. Компиляторы, удовлетворяющие этой спецификации, создают объекты, способные взаимодействовать друг с другом. Поэтому любой язык, соответствующий требованиям CLS, может использовать все возможности библиотеки FCL.
Как уже отмечалось, основными языками, предназначенными для платформы .NET Framework, являются С#, VB.NET, Managed C++ и JScript .NET. Для данных языков Microsoft предлагает собственные компиляторы, переводящие программу в IL-код, который выполняется JIT-компилятором среды CLR. Кроме Microsoft, еще несколько компаний и академических организаций создали свои собственные компиляторы, генерирующие код, работающий в CLR. На сегодняшний момент известны компиляторы для Pascal, Cobol, Lisp, Perl, Prolog и т.д. Это означает, что можно написать программу, например, на языке Pascal, а затем, воспользовавшись соответствующим компилятором, создать управляемый код, который будет работать в среде CLR.
Наилучшим образом свойства VisualStudio.NET реализованы в языке С#.
При создании этого языка программирования преследовалось несколько целей:
§ Создать первый компонентно-ориентированный язык в семействе C/C++. Как уже говорилось выше, программирование все в меньшей степени ориентируется на создание приложений, работающих на одном конкретном компьютере, и все больше смещается в сторону создания распределенных приложений, состоящих из компонентов, передаваемых по сети и подключаемых по мере необходимости. Для создания таких компонентов могут использоваться традиционные языки программирования (их и следует для этого использовать, поскольку они оптимизированы для решения подобных задач). Однако к языку, используемому для объединения этих компонентов в одно законченное приложение, предъявляются столь специфические требования, что им в полной мере не отвечает ни один из традиционных языков программирования. Этот язык не должен отличаться особой сложностью, поскольку все сложные задачи решаются на уровне компонентов, но должен обладать развитой системой диагностики и повышенным уровнем безопасности, так как ему приходится работать с объектами, совместная работа которых не гарантирована.
§ Создать альтернативу языку Java. При создании языка Java, используемого для разработки приложений, которые должны работать везде "от кофеварки до сервера", выяснилось, что единственным путем создания такого языка является размещение всех используемых данных в объектах, то есть, грубо говоря, превращение всех типов данных в классы. Поскольку попытка "внести улучшения" в стандарт языка Java, похоже, бесславно завершилась, перед Microsoftвстала задача создать собственную альтернативу данному языку, используя аналогичные подходы. Поэтому в С# не только сокращается разрыв между простыми типами и классами, но и имеется возможность создавать структурные типы, объектам которых не требуется выделять память в куче.
§ Повысить надежность программ и их устойчивость к ошибкам. Для решения этой задачи в С# реализована автоматическая сборка мусора, исключающая возникновение утечек памяти, структурированная обработка исключений и безопасная работа с типами.
§ Создать максимально простой язык. Как уже говорилось выше, на компонентно-ориентированном языке не предполагается создание особо сложных компонентов: для этого можно воспользоваться одним из уже имеющихся языков. Поэтому перед разработчиками С# была поставлена задача максимального упрощения языка при повышении его строгости. Для простоты подключения компонентов в С# интегрированы хорошо знакомые разработчикам механизмы СОМ и DLL, что также облегчает работу. В то же время, для создания и использования объектов С# не нужны файлы заголовков, файлы .idlили библиотеки типов. Эти компоненты содержат всю необходимую информацию в себе и не нуждаются в регистрации.
Язык С# одновременно является и очень простым, и очень сложным. Набор его исполняемых операторов сведен до минимума, а все используемые типы строго формализованы, что существенно облегчает его изучение. С другой стороны, этот язык предназначен для работы с достаточно сложными объектами и не приспособлен для выполнения простейших задач, обычно используемых для ознакомления с языком (кроме самых простых и, как правило, не имеющих практической ценности). Поэтому, чтобы эффективно использовать этот язык, необходимо разбираться в достаточно сложных областях программирования. Однако вернемся к его простоте.
Основным отличием С# от С и С++ является отсутствие указателей, что несколько непривычно после столь интенсивного их использования в этих языках. По умолчанию все программы на языке С# преобразуются в контролируемый код, в котором запрещено использование небезопасных операций, включая непосредственное обращение к памяти. Эта операция считается небезопасной, поскольку при ее выполнении отсутствует проверка того, что обращение производится именно к той области памяти, к которой хотел обратиться разработчик.
В С++ одни и те же операции ::, . и -> используются в пространствах имен, функциях-членах класса и ссылках. Для новичка бывает сложно разобраться, в каком контексте используется каждая из этих операций. В С# используется только одна операция . (точка), используемая для разделения имен при их вложении.
В С# используется единая система типов, рассматривающая любой тип, начиная от простейшего целочисленного типа до сложнейшего класса. Для того чтобы представление простого типа как объекта не привело к снижению быстродействия приложения, в С# используется механизм упаковки и распаковки.
С целью дальнейшего ужесточения проверки совместимости типов, целый и логический типы в С# разделены, что исключает проверку нулевого значения целочисленной переменной в условном операторе без формирования условного выражения, чем очень увлекаются программисты на С и С++. С другой стороны, это исключает появление ошибок при использовании операции присваивания вместо операции сравнения.
При разработке С# был учтен обширный опыт работы с языком С++, и многие операции, которые в С++ приходилось выполнять самостоятельно, в С# выполняются автоматически.
Одним из нововведений С# является появление нового типа финансовых данных. Тип decimalпозволяет программисту без всяких опасений сравнивать два числа, записанных в формате с плавающей точкой. Не секрет, что в С++ и других языках программирования эта операция, вследствие непредсказуемых ошибок округления, была довольно-таки рискованной. Если и этот тип вас не устраивает, вы можете создать свой собственный простой тип, удовлетворяющий всем вашим запросам (а если не сможете, значит, ваши запросы превышают ваши возможности как программиста).
В С# реализовано автоматическое управление памятью: выделение памяти осуществляется пользователем, а ее уничтожение - сборщиком мусора. Поскольку ссылка на производный класс может быть оформлена как ссылка на его базовый класс, и у программиста нет возможности в явном виде указать тип уничтожаемого объекта, подобное распределение обязанностей подразумевает существенное повышение требований к безопасности используемых типов.
Среда выполнения программ С# является верифицируемой, то есть в процессе выполнения приложения она следит за тем, чтобы работающий код не производил недопустимых операций с типами. При этом производится не только проверка допустимости преобразований типов (например, при передаче аргумента методу), но и проверка допустимости обращения по указанному адресу.
Требования безопасности накладывают на разработчика определенные ограничения, основные из которых перечислены ниже.
§ Все переменные должны быть инициализированы. Все объекты в С# инициализируются по умолчанию. В результате этой инициализации вся память, выделенная под данные инициализируемого объекта, заполняется нулевыми значениями. Локальные переменные должны инициализироваться разработчиком. При появлении в программе неинициализированной переменной компилятор выдаст сообщение об ошибке.
§ В С# введены строгие правила преобразования типов: тип объекта может быть преобразован к другому типу только в том случае, если тип этого объекта является производным от типа, к которому производится преобразование, или же в том случае, если такое преобразование восстанавливает тип объекта, измененный при преобразовании к базовому типу. Следует помнить, что эти правила действуют при непосредственном преобразовании типа. При присваивании типа одного объекта другому действуют более сложные правила, сводящиеся к нахождению для этих объектов общего типа, к которому может быть произведено преобразование, и присваиванию объекту этого типа.
§ В С# производится проверка границ выделенной памяти. Поэтому в массив может быть записано только то число элементов, которое указано при его создании. При попытке записи "дополнительного" элемента будет выдано сообщение об ошибке.
§ В С# определены строгие правила выполнения арифметических операций. При возникновении переполнения в некоторых случаях генерируется исключение (как правило, при работе с целыми числами), а в некоторых - результатом операции является специальное значение, которое может быть использовано в последующих операциях (как правило, при работе с числами с плавающей точкой).
§ В С# осуществляется контроль типов аргументов, передаваемых по ссылке.
Язык С# изначально создавался для объединения компонентов, разработанных с использованием различных языков программирования. VisualStudio.NETпозволяет использовать в программах С# вызовы функций из библиотек динамической компоновки или использовать компоненты СОМ, которые рассматриваются ею как компоненты .NETRuntime. Эти компоненты взаимозаменяемы - не только компоненты СОМ могут представляться как компоненты .NETRuntime, но и компоненты NETRuntimeмогут использоваться в качестве компонентов СОМ.
2. Алгоритмическая часть
2.1 Работа с файловой системой Windows
В пространстве имен System.IO предусмотрено четыре класса, которые предназначены для работы с файловой системой компьютера, т.е для создания, удаления переноса и т.д. файлов и каталогов.
Первые два типа - Directory и Fi1е реализуют свои возможности с помощью статических методов, поэтому данные классы можно использовать без создания соответствующих объектов (экземпляров классов).
Следующие типы - DirectoryInfo и FileInfo обладают схожими функциональными возможностями c Directory и Fi1е, но порождены от класса FileSystemInfo и поэтому реализуются путем создания соответствующих экземпляров классов.
Работа с каталогами
Абстрактный класс FileSystemInfo
Значительная часть членов FileSystemInfo предназначена для работы с общими характеристиками файла или каталога (метками времени, атрибутами и т. п.). Рассмотрим некоторые свойства FileSystemInfo:
Свойство |
Описание |
|
Attributes |
Позволяет получить или установить атрибуты для данного объекта файловой системы. Для этого свойства используются значения и перечисления FileAttributes |
|
CreationTime |
Позволяет получить или установить время создания объекта файловой системы |
|
Exists |
Может быть использовано для того, чтобы определить, существует ли данный объект файловой системы |
|
Extension |
Позволяет получить расширение для файла |
|
FullName |
Возвращает имя файла или каталога с указанием пути к нему в файловой системе |
|
LastAccessTime |
Позволяет получить или установить время последнего обращения к объекту файловой системы |
|
LastWriteTime |
Позволяет получить или установить время последнего внесения изменений в объект файловой системы |
|
Name |
Возвращает имя указанного файла. Это свойство доступно только для чтения. Для каталогов возвращает имя последнего каталога в иерархии, если это возможно. Если нет, возвращает полностью определенное имя |
В FileSystemInfo предусмотрено и несколько методов. Например, метод Delete() - позволяет удалить объект файловой системы с жесткого диска, a Refresh() - обновить информацию об объекте файловой системы.
Класс DirectoryInfo
Данный класс наследует члены класса FileSystemInfo и содержит дополнительный набор членов, которые предназначены для создания, перемещения, удаления, получения информации о каталогах и подкаталогах в файловой системе. Наиболее важные члены класса содержатся в следующей таблице:
Член |
Описание |
|
Create() CreateSubDirectory() |
Создают каталог (или подкаталог) по указанному пути в файловой системе |
|
Delete() |
Удаляет пустой каталог |
|
GetDirectories() |
Позволяет получить доступ к подкаталогам текущего каталога (в виде массива объектов DirectoryInfo) |
|
GetFiles() |
Позволяет получить доступ к файлам текущего каталога (в виде массива объектов FileInfo) |
|
MoveTo() |
Перемещает каталог и все его содержимое на новый адрес в файловой системе |
|
Parent |
Возвращает родительский каталог в иерархии файловой системы |
Работа с типом DirectoryInfo начинается с того, что мы создаем экземпляр класса (объект), указывая при вызове конструктора в качестве параметра путь к нужному каталогу. Если мы хотим обратиться к текущему каталогу (то есть каталогу, в котором в настоящее время производится выполнение приложения), вместо параметра используется обозначение ".". Например:
// Создаем объект DirectoryInfo, которому будет обращаться к текущему каталогу
DirectoryInfo dir1 = new DirectoryInfo(".");
// Создаем объект DirectoryInfo, которому будет обращаться к каталогу d:\prim
DirectoryInfo dir2 = new DirectoryInfo(@"d:\prim");
Если мы попытаемся создать объект DirectoryInfo, связав его с несуществующим каталогом, то будет сгенерировано исключение System.IO.DirectoryNotFoundException. Если же все нормально, то мы сможем получить доступ к данному каталогу. В примере, который приведен ниже, мы создаем объект DlrectoryInfo, который связан с каталогом d:\prim, и выводим информацию о данном каталоге:
using System;
using System.Text;
using System.IO;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
DirectoryInfo dir = new DirectoryInfo(@"d:\prim");
Console.WriteLine("***** "+dir.Name+" *****");
Console.WriteLine("FullName: {0}", dir.FullName);
Console.WriteLine("Name: {0}", dir.Name);
Console.WriteLine("Parent: {0}", dir.Parent);
Console.WriteLine("Creation: {0}", dir.CreationTime);
Console.WriteLine("Attributes: {0}", dir.Attributes.ToString());
Console.WriteLine("Root: {0}", dir.Root);
}
}
}
Свойство Attributes позволяет получить информацию об атрибутах объекта файловой системы. Возможные значения данного свойства приведены в следующей таблице:
Значение |
Описание |
|
Archive |
Этот атрибут используется приложениями при проведении резервного копирования, авнекоторых случаях - удаления старых файлов |
|
Compressed |
Определяет, что файл является сжатым |
|
Directory |
Определяет, что объект файловой системы является каталогом |
|
Encrypted |
Определяет, что файл является зашифрованным |
|
Hidden |
Определяет, что файл является скрытым (такой файл не будет выводиться при обычном просмотре каталога) |
|
Normal |
Определяет, что файл находится в обычном состоянии и для него установлены любые другие атрибуты. Этот атрибут не может использоваться с другими атрибутами |
|
Offline |
Файл (расположенный на сервере) кэширован в хранилище off-line на клиентском компьютере. Возможно, что данные этого файла уже устарели |
|
Readonly |
Файл доступен только для чтения |
|
System |
Файл является системным (то есть файл является частью операционной системы или используется исключительно операционной системой) |
Через DirectoryInfo можно не только получать доступ к информации о текущем каталоге, но получить доступ к информации о его подкаталогах:
class Program
{
static void printDirect( DirectoryInfo dir)
{
Console.WriteLine("***** "+dir.Name+" *****");
Console.WriteLine("FullName: {0}", dir.FullName);
Console.WriteLine("Name: {0}", dir.Name);
Console.WriteLine("Parent: {0}", dir.Parent);
Console.WriteLine("Creation: {0}", dir.CreationTime);
Console.WriteLine("Attributes: {0}", dir.Attributes.ToString());
Console.WriteLine("Root: {0}", dir.Root);
}
static void Main(string[] args)
{
DirectoryInfo dir = new DirectoryInfo(@"d:\prim");
printDirect(dir);
DirectoryInfo[] subDirects = dir.GetDirectories();
Console.WriteLine("Найдено {0} подкаталогов", subDirects.Length);
foreach (DirectoryInfo d in subDirects)
{
printDirect(d);
}
}
}
Метод CreateSubdirectory() позволяет создать в выбранном каталоге как единственный подкаталог, так и множество подкаталогов (в том числе, и вложенных друг в друга). Создадим в каталоге несколько дополнительных подкаталогов:
DirectoryInfo dir = new DirectoryInfo(@"d:\prim");
dir.CreateSubdirectory("doc"); //создали подкаталог
dir.CreateSubdirectory(@"book\2008"); //создали вложенный подкаталог
Класс Directory
Работать с каталогами файловой системы компьютера можно и при помощи класса Directory, функциональные возможности которого во многом совпадают с возможностями DirectoryInfo. Но члены данного класса реализованы статически, поэтому для их использования нет необходимости создавать объект.
Рассмотрим работу с методами данного класса на примерах.
Directory.CreateDirectory(@"d:\prim\2008");//создали подкаталог 2008
Directory.Move(@"d:\prim\bmp",
@"d:\prim\2008\bmp");//перенесли каталог bmp в каталог 2008
Directory.Move(@"d:\prim\letter",
@"d:\prim\archives");//переименоваликаталог letter в archives
Замечания.
Удаление каталога возможно только тогда, когда он пуст.
На практике комбинируют использование классов Directory и DirectoryInfo.
Работа с файлами
Класс Filelnfo
Класс Filelnfo предназначен для организации доступа к физическому файлу, который содержится на жестком диске компьютера. Он позволяет получать информацию об этом файле (например, о времени его создания, размере, атрибутах и т. п.), а также производить различные операции, например, по созданию файла или его удалению. Класс FileInfo наследует члены класса FileSystemInfo и содержит дополнительный набор членов, который приведен в следующей таблице:
Член |
Описание |
|
AppendText() |
Создает объект StreamWriter для добавления текста к файлу |
|
CopyTo() |
Копирует уже существующий файл в новый файл |
|
Create() |
Создает новый файл и возвращает объект FileStream для взаимодействия с этим файлом |
|
CreateText() |
Создает объект StreamWriter для записи текстовых данных в новый файл |
|
Delete() |
Удаляет файл, которому соответствует объект FileInfo |
|
Directory |
Возвращает каталог, в котором расположен данный файл |
|
DirectoryName |
Возвращает полный путь к данному файлу в файловой системе |
|
Length |
Возвращает размер файла |
|
MoveTo() |
Перемещает файл в указанное пользователем место (этот метод позволяет одновременно переименовать данный файл) |
|
Name |
Позволяет получить имя файла |
|
Ореn() |
Открывает файл с указанными пользователем правами доступа на чтение, запись или совместное использование с другими пользователями |
|
OpenRead() |
Создает объект FileStream, доступный только для чтения |
|
OpenText() |
Создает объект StreamReader (о нем также будет рассказано ниже), который позволяет считывать информацию из существующего текстового файла |
|
OpenWrite() |
Создает объект FileStream, доступный для чтения и записи |
Как мы видим, большинство методов FileInfo возвращает объекты (FIleStream, StreamWriter, StreamReader и т. п.), которые позволяют различным образом взаимодействовать с файлом, например, производить чтение или запись в него. Приемы работы с данными потоками нам уже известны. Поэтому рассмотрим другие возможности класса FileInfo.
using System;
using System.Text;
using System.IO; //для работы с файловым вводом-выводом
using System.Text.RegularExpressions;
namespace MyProgram
{
class Program
{
static void Main()
{
//создаем новый файл и связываем с ним строковый поток
FileInfo f = new FileInfo("text.txt");
StreamWriter fOut = new StreamWriter(f.Create());
//записываем в файл данные и закрываем строковый поток,
// при этом связь с физическим файлом для f не рвется
fOut.WriteLine("ОДИН ДВА ТРИ...");
fOut.Close();
//получаем информацию о файле
Console.WriteLine("*******"+f.Name File Inf+"**************");
Console.WriteLine("File size: {0}", f.Length);
Console.WriteLine("Creation: {0}", f.CreationTime);
Console.WriteLine("Attributes: {0}", f.Attributes.ToString());
}
}
}
Рассмотрим следующий пример:
static void Main()
{
FileInfo f = new FileInfo(@"d:\prim\letter\letter1.txt");
f.CopyTo(@"d:\prim\bmp\letter.txt");
Directory.CreateDirectory(@"d:\prim\archives");
f.MoveTo(@"d:\prim\archives\letter1.txt");
f = new FileInfo(@"d:\prim\letter\letter2.txt");
f.Delete();
}
Рассмотрим еще один пример по удалению файлов:
static void printFile( FileInfo file)
{
Console.WriteLine("***** "+file.Name+" *****");
Console.WriteLine("File size: {0}", file.Length);
Console.WriteLine("Creation: {0}", file.CreationTime);
Console.WriteLine("Attributes: {0}", file.Attributes.ToString());
}
static void Main(string[] args)
{
DirectoryInfo dir = new DirectoryInfo(@"d:\prim\bmp");
FileInfo[] files = dir.GetFiles();
if (files.Length!=0)
{
Console.WriteLine("Найдено {0} файла", files.Length);
foreach (FileInfo f in files)
{
printFile(f);
f.Delete();
}
Console.WriteLine("\nТеперьвкаталогесодержится {0} файловиможноегоудалить",
dir.GetFiles().Length);
dir.Delete();
}
}
Класс File
Доступ к физическим файлам можно получать и через статические методы класса File. Большинство методов объекта Fileinfo представляют в этом смысле зеркальное отражение методов объекта File.
static void Main(string[] args)
{
File.Copy(@"d:\prim\letter\letter1.txt",@"d:\prim\bmp\letter1.txt");
Directory.CreateDirectory(@"d:\prim\archives");
File.Move(@"d:\prim\letter\letter1.txt",@"d:\prim\archives\letter1.txt");
File.Delete(@"d:\prim\letter\letter2.txt");
Directory.Delete(@"d:\prim\letter");
}
Имеет прямой смысл использовать статический класс File, когда требуется осуществить единственный вызов метода на объект. В этом случае вызов будет выполнен быстрее, поскольку .NET Framework не придется проходить через процедуру создания экземпляра нового объекта с последующим вызовом метода. Однако если приложение осуществляет несколько операций над файлом, то более разумным представляется создать экземпляр объекта FileInfo и использовать его методы. Это позволит сэкономить определенное время, поскольку объект будет заранее настроен на нужный файл в файловой системе, в то время как статическому классу придется каждый раз осуществлять его поиск заново.
Аналогичное правило действует и при выборе между классами 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 Структурная модель
Определив все подзадачи для программы, представим в виде схемы её алгоритмическую декомпозицию:
Размещено на http://www.allbest.ru/
Структурная модель
Для создания алгоритмической декомпозиции программы необходимо определить в ней подзадачи различных уровней.
На первом этапе разработки диаграммы определим подзадачи, следующие друг за другом:
Вывести стартовую форму (на которой отображены рабочее поле для ввода данных и кнопки выбора действий);
Нажатием различных кнопок выполнять нужные операции.
Закрыть основное окно программы.
3. Структурная схемаалгоритма
Размещено на http://www.allbest.ru/
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
Размещено на Allbest.ru
...Подобные документы
Создание БД "Экзамен". Характеристика методов класса. Необходимость использования стандартных подключаемых модулей (заголовочных файлов) Visual Studio для реализации пользовательского интерфейса и работы с вводом-выводом в поток консоли или в файл.
курсовая работа [1,7 M], добавлен 28.05.2013Введение в Microsoft Visual Studio. Диалоговое окно "Восстановленные файлы" интегрированной среды разработки. Веб-обозреватель интегрированной среды разработки. Диалоговое окно "Проверка подлинности прокси-сервера". Сохранение и восстановление файлов.
реферат [22,0 K], добавлен 29.05.2013Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.
курсовая работа [585,5 K], добавлен 24.03.2009Рассмотрение основ работы в Microsoft Visual Studio 2010 с языком программирования С#. Реализация программы обработки данных авиапассажиров. Выбор метода ввода данных из текстового файла. Создание фильтра для обработки списка по определенным критериям.
курсовая работа [1,4 M], добавлен 17.01.2016Использование гипертекстовой разбивки текстового документа в современных информационных системах. Вложенность тэгов в XML. Запись, чтение файлов XML. Создание приложения в Visual Studio.Net. Трансформация и привязка данных, проверка достоверности.
курсовая работа [40,7 K], добавлен 09.01.2014Описание программного продукта Visual Studio. Возможности, преимущества и недостатки бесплатной среды программирования Sharp Develop для проектов на платформе MS.NET. Получение информации из справочной системы .NET SDK. Запуск визуального отладчика CLR.
реферат [393,4 K], добавлен 05.04.2017Стандартные функции для работы с динамической памятью. Представление списков цепочками звеньев. Организация файлового каталога в файловой системе в виде линейного списка на языке Visual C++. Создание блок-схемы и инструкции по работе с программой.
курсовая работа [252,0 K], добавлен 22.01.2015Обоснование выбора средства программирования. Входная и выходная информация. Основные требования к программному и аппаратному обеспечению. Анализ метода поиска в строке по алгоритму Боуера-Мура. Глобальные переменные и константы в среде Visual Studio.
курсовая работа [489,0 K], добавлен 01.07.2015Разработка игры "Угадай персонажа", ее суть и содержание. Запоминание новых персонажей и вопросов, коррекция базы данных. Использование языка программирования С++ и среды разработки Microsoft Visual Studio 2010. Алгоритмы и методы, структура программы.
курсовая работа [571,9 K], добавлен 14.07.2012Розробка таблиці для збереження даних у текстовому файлі про фільми в середовищі програмування Visual Studio C++ та їх сортування за країною виробництва. Реалізація таблиці за допомогою компонента dataGridView. Опис і контрольний приклад роботи програми.
курсовая работа [1,4 M], добавлен 02.11.2016Объектно-ориентированная технология создания программ. Среда разработки Visual Studio.NET. Особенности среды Microsoft Visual Studio 2010. Приложения C# для расчетов по формулам, консольный ввод-вывод. Форматирование значений данных. Программы с циклами.
методичка [2,1 M], добавлен 11.09.2014Требования к MS Office 2007. Набор средств разработки Visual Studio Tools for Office как альтернатива VBA. Разработка СУБД на базе MS Access. Разработка надстройки "Электронные компоненты" для PowerPoint на языке C# в среде MS Visual Studio 2010.
дипломная работа [5,2 M], добавлен 03.05.2013Языки среды программирования Visual Studio. Стартовая страница интегрированной среды разработки. Окно New Project. Вкладка разработки формы. Перемещение и изменение размера кнопки. Прибавление программного кода к кнопке. Запуск и сохранение проекта.
презентация [1,4 M], добавлен 29.04.2014Понятие математического программирования. Класс как тип структуры, позволяющий включать в описание типа не только элементы данных, но и функции. Рассмотрение основных особенности языка программирования C++. Характеристика среды MS Visual Studio 2008.
контрольная работа [318,0 K], добавлен 13.01.2013Microsoft Visual C++ и среда программирования Microsoft Developer Studio 6.0. Решение интеллектуальной задачи на компьютере. Построение алгоритма кодирования на Visual C++. Алгоритм решения задачи. Описание программы "Sort". Инструкции пользователя.
курсовая работа [46,0 K], добавлен 27.11.2007Сравнительная характеристика средств обучения программированию в среде Visual Basic. Задачи проектируемых автоматизированных программных систем. Комплекс технических средств. Математическое и программное обеспечение. Язык программирования Visual Basic.
дипломная работа [64,1 K], добавлен 17.05.2007HTML5 — язык для структурирования и представления содержимого для всемирной паутины, а также основная технология, используемая в Интернете. Создание web-приложения и использованием технологии Asp.net MVC 3 и языка web-разметки HTML5. Состав платформы MVC.
курсовая работа [1,2 M], добавлен 25.05.2012Снижение трудоемкости выборки файлов; поиск текста при производстве компьютерных экспертиз. Автоматизированная индексация файлов и формализация задач; разработка инфологической, физической моделей системы с привязкой к СУБД; выбор языка программирования.
дипломная работа [4,1 M], добавлен 24.09.2013Разработка и освоение в современном производстве информационной подсистемы. Создание базы данных в среде MS SQL Server 2008 и приложения в среде MS Visual Studio 2012. Процесс ввода при выборе пунктов меню. Заполнение формы с критериями на фильтрацию.
отчет по практике [834,4 K], добавлен 27.11.2013Вывод графических файлов на компонент Picture. Действия Visual Basic по умолчанию. Создание графического интерфейса пользователя. Циклический показ фотографий. Формирование списка изображений и их циклический вывод на экран с определенным интервалом.
курсовая работа [3,2 M], добавлен 05.01.2013