- •1.2 Понятия приложения, проекта, решения
- •1.3 Среда разработки Visual Studio .Net
- •1.4 Создание первого проекта
- •1. 5 Компиляция и выполнение программы в среде clr
- •2.1 Основы технологии ооп
- •2.2 Состав языка
- •2.3 Типы данных
- •2.4 Переменные и константы
- •2.5 Организация ввода-вывода данных. Форматирование
- •3.1 Некоторые операции с#
- •Отрицание:
- •Условная операция.
- •3.2 Выражения и преобразование типов
- •3.3 Перечень операций
- •3.4 Математические функции языка с#
- •4.1 Операторы следования
- •4.2 Операторы ветвления
- •4.3 Операторы цикла
- •4.4 Операторы безусловного перехода
- •5.1 Методы: основные понятия
- •5.2 Перегрузка методов
- •6.1 Прямая рекурсия
- •6.2 Косвенная рекурсия
- •7.1 Оператор try
- •7.2 Операторы checked и unchecked
- •7.3 Генерация собственных исключений
- •7.4 Приемы использования обработчиков исключений
- •8.1 Одномерные массивы
- •8.2 Массив как параметр
- •8.3 Массив как объект
- •8.4 Многомерные массивы
- •8.5 Ступенчатые массивы
- •8.6 Оператор foreach и его использование при работе с массивами
- •Примеры
- •9.1 Символы char
- •9.2 Неизменяемые строки string
- •9.3 Изменяемые строки
- •Вариант 1
- •Вариант 2
- •Редактирование текста;
- •10.1 Метасимволы в регулярных выражениях
- •10.2 Поиск в тексте по шаблону
- •10.3 Редактирование текста
- •11.1 Байтовый поток
- •11.2 Символьный поток
- •11.3 Двоичные потоки
- •11.4 Перенаправление стандартных потоков
- •Практикум
- •12.1.Работа с файловой системой: классы Directory и Filе и классы DirectoryInfo и FileInfo
- •12.2 Класс FileSystemInfo
- •12.3 Класс DirectoryInfo
- •12.4 Класс Directory
- •2. Реализуем метод, позволяющий получить по имени узла полное имя соответствующей папки
- •12.2 Работа с файлами
- •12.5 Класс File
- •13.1. Классы: основные понятия, данные, методы, конструкторы, свойства
- •13.2 Данные: поля и константы
- •13.3 Методы
- •Конструкторы экземпляра
- •13.4 Конструкторы класса
- •13.5 Свойства
- •13.6 Один класс - один файл
- •13.7. Классы: деструкторы, индексаторы Деструкторы
- •Индексаторы
- •13.8 Операции класса
- •14.1 Иерархия и наследование
- •Использование защищенного доступа
- •14.2 Наследование конструкторов
- •Позволяет вызвать конструктор базового класса:
- •Позволяет получить доступ к члену базового класса, который скрыт "за" членом производного класса.
- •14.3 Многоуровневая иерархия
- •14.4 Переменные базового класса и производного класса
- •14.5 Виртуальные методы
- •14.6 Абстрактные методы и классы
- •14.7 Запрет наследования
- •Самостоятельная работа
- •15.1. Пользовательские и стандартные интерфейсы
- •15.2 Стандартные интерфейсы .Net
- •15.3 Структуры
- •Задание
- •16.1. Классификация коллекций.
- •16.2 Коллекции общего назначения
- •16.3 Класс Stack
- •16.4 Класс Queue
- •16.5 Класс ArrayList
- •16.6 Класс Hashtable
- •17.1 Струткура простейшего windows-приложения
- •17.2 Элементы управления на форме
- •17.3 Обработка событий
- •17.4 Работа с элементами управления
- •17.5 Кнопки
- •17.6 Работа с элементами управления в режиме работы приложения
- •17.7 Работа со списками: ListBox, ComboBox, NumericUpDown.
- •17.8 Работа с переключателями: RadioButton, CheckBox
- •18.1 Рисование в форме
- •18.2 Работа с изображениями
12.4 Класс Directory
Работать с каталогами файловой системы компьютера можно и при помощи класса Directory, функциональные возможности которого во многом совпадают с возможностями DirectoryInfo. Но члены данного класса реализованы статически, поэтому для их использования нет необходимости создавать объект.
Рассмотрим работу с методами данного класса на примерах.
Замечание. Удалите с диска d измененную папку prim. И еще раз скопируйте ее исходную версию из раздела 12 данного электронного учебника.
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.
Пример. Рассмотрим пример windows - приложения, которое позволяет строить и просматривать дерево папок вашего ПК. При запуске приложения строится дерево дисков. Двойной щелчок покаждому диску позволяет раскрыть дерево папок. Для реализации интерфейса используется компонент TreeView
Приведем реализацию необходимых методов класса Form1
1. При запуске формы должно отображаться дерево всех дисков ПК. Для этого реализован обработчик события активации формы Form1_Activated
private void Form1_Activated(object sender, System.EventArgs e)
{// Получаем все диски (a:, c: и т.д.).
string [] drives = Environment.GetLogicalDrives();
foreach(string s in drives)
{
// Добавляем корневой элемент для каждого диска.
TreeNode tn = treeView1.Nodes.Add(s);
// Добавляем фиктивный подузел для каждого
// диска (для появления квадратика с плюсиком).
tn.Nodes.Add("");
// Устанавливаем свойство tag.
// Пустое значение свойства ("") - узел еще не раскрывался.
// Плюс ("+") - узел раскрывался и в него были
// добавлены нужные подузлы.
tn.Tag = "";
}
}
2. Реализуем метод, позволяющий получить по имени узла полное имя соответствующей папки
// Получение полного имени папки по узлу.
private String GetFullPath(TreeNode tn)
{
// Устанавливаем текуший узел на переданный в параметре.
TreeNode currNode = tn;
// В полное имя пока записываем текст,показываемый в текущем узле.
String fullPath = currNode.Text;
// Двигаемся к корню дерева.
while(currNode.Parent!=null)
{
// Переходим на родительский узел.
currNode = currNode.Parent;
// К полному имени приписываем текст родитеского узла.
fullPath= currNode.Text + @"\" + fullPath;
}
// Возвращаем полный путь.
return fullPath + @"\";
}
3. Добавление подузлов текущего узла
private void AddTreeNodes(TreeNode tn)
{
TreeNode aux;
// Получаем полный путь для папки узла.
DirectoryInfo d = new DirectoryInfo(GetFullPath(tn));
// Массив для хранения подпапок.
DirectoryInfo[] ds;
try
{
// Получаем все подпапки для папки.
ds = d.GetDirectories();
// Для каждой папки выводим ее имя и имена всех подпапок.
foreach (DirectoryInfo s in ds)
{
// Добавляем каждую подпапку.
aux = tn.Nodes.Add(s.Name);
// Устанавливаем для нее признак, что ее еще не раскрывали.
aux.Tag = "";
try
{
// Если она не пуста,
if(s.GetDirectories().GetLength(0)!=0)
{
// то добавляем в нее фиктивный узел.
aux.Nodes.Add("");
}
}
// Перехватываем исключение запрещенного доступа.
catch (UnauthorizedAccessException)
{
};
}
}
//Перехват общего исключения (например, если диск a: не вставлен).
catch(Exception) {}
}
4. Раскрытие ветки дерева
private void NodeExpand(TreeNode tn)
{
// Если есть подузлы.
if(tn.Nodes.Count!=0)
{
// Если раскрываем в первый раз.
if(((string)tn.Tag)=="")
{
// Удаляем фиктивный узел.
tn.Nodes.RemoveAt(0);
// Добавляем подузлы.
AddTreeNodes(tn);
// Устнавливаем признак того, что
// узел уже раскрывали и добавили в него все подузлы.
tn.Tag = "+";
}
}
}
5. Перед раскрытием ветки дерева необходимо добавить подузлы. Для этого необходимо реализовтаь обработчик события treeView1_BeforeExpand
private void treeView1_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
{ // Добавление подузлов перед раскрытием.
NodeExpand(e.Node);
}