Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 800564

.pdf
Скачиваний:
3
Добавлен:
01.05.2022
Размер:
5.57 Mб
Скачать

public Form1()

{

InitializeComponent();

}

добавить объявление:

DriveInfo[] allDrives;

5)Создать событие при загрузке формы Form1_Load для чего выполнить следующие действия:

- в конструкторе форм сделать активным объект Form1; - в окне События найти Load, создать процедуру, щелк-

нув двойным щелчком на пустое поле рядом с названием события;

6)В редакторе кода в теле процедуры обработки события ввести следующий код:

allDrives = DriveInfo.GetDrives(); foreach (DriveInfo d in allDrives)

{

comboBox1.Items.Add(d.Name);

}

comboBox1.SelectedIndex = -1;

Данный фрагмент позволяет при загрузке формы в ОП в allDrives считать все диски данного компьютера, затем в цикле ввести перечень дисков в компонент comboBox1, далее устанавливается начальное значение открывающегося списка в нулевое значение.

7) Написать метод info(DriveInfo D), который для выбранного диска будет выдавать информацию об объеме диска и его свободном пространстве.

void info(DriveInfo D)

{

if (D.IsReady) // Если диск доступен:

{

String v;

151

long a = (1024 * 1024 * 1024); // Размер гигабай-

та

if (D.TotalSize <= 10 * a) // Если объём диска меньше гигабайта

v = Convert.ToString(D.TotalSize / (1024 *

1024)) + " Мб";

//Выводить память в мегабайтах

//Иначе выводить память в гигабайтах:

else v = Convert.ToString(D.TotalSize / a) + " Гб"; listBox1.Items.Add("Объём диска: " + v);

v = "";

if (D.TotalFreeSpace <= 10 * a) // Если свобод-

ное пространство меньше гигабайта

v = Convert.ToString(D.TotalFreeSpace / (1024

*1024)) + " Мб";

//Выводить память в мегабайтах

//Иначе выводить память в гигабайтах:

else v = Convert.ToString(D.TotalFreeSpace / a) +

" Гб";

listBox1.Items.Add("Объём свободного про-

странства: " + v);

}

else // Если диск недоступен - вывести сообще-

ние:

{

listBox1.Items.Add(" Невозможно отобразить информацию");

}

}

8) Создать событие, которое при выборе диска в открывающемся списке всех дисков выдаст информацию о памяти диска с помощью метода info.

152

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

comboBox1.Text = comboBox1.SelectedText; info(allDrives[comboBox1.SelectedIndex]);

}

Пример работы программы приведен на рис. 72.

Рис. 72. Выдача информации о памяти дисков компьютера

Задание 3. Разработать Windows приложение, позволяющее пользователю просматривать папки выбранного диска и список файлов выбранной папки, а также атрибуты выбранного файла.

Просмотреть функции API, описанные выше и относящиеся к данному заданию, применить их в приложении (самостоятельно).

Ход выполнения задания:

1) Разберите листинг программы, найдите интерфейсные компоненты языка C#, которые надо установить на форму.

153

2)Создайте Windows приложение и установите компоненты на форму.

3)Разберите в листинге методы и события, добавьте события к нужным объектам, введите код в программу.

4)Использовать функции API, относящиеся к данному заданию.

Листинг программы: using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms; using System.IO;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

//*** заполнение дерева каталогов ***

public void DriveTreeInit()

{

string[] drivesArray = Directory.GetLogicalDrives();

treeView1.BeginUpdate(); // отключение экрана

154

treeView1.Nodes.Clear();

foreach (string s in drivesArray)

{

TreeNode drive = new TreeNode(s, 0, 0); treeView1.Nodes.Add(drive);

GetDirs(drive);

}

treeView1.EndUpdate(); //включение экрана

}

//============================

//*** Заполнение корневых каталогов ***

public void GetDirs(TreeNode node)

{

DirectoryInfo[] diArray;

node.Nodes.Clear();

string fullPath = node.FullPath;

DirectoryInfo di = new DirectoryInfo(fullPath);

try

{

diArray = di.GetDirectories();

}

catch

{

return;

}

foreach (DirectoryInfo dirinfo in diArray)

155

{

TreeNode dir = new TreeNode(dirinfo.Name, 0, 0); node.Nodes.Add(dir);

}

}

//============================

private void Form1_Load(object sender, EventArgs

e)

{

DriveTreeInit();

}

//заполнение вложенных каталогов

private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)

{

treeView1.BeginUpdate();

foreach (TreeNode node in e.Node.Nodes)

{

GetDirs(node);

}

treeView1.EndUpdate();

}

//отображение файлов содержащихся в каталоге private void treeView1_AfterSelect(object sender,

TreeViewEventArgs e)

{

treeView2.Nodes.Clear();

if (treeView1.SelectedNode != null && treeView1.SelectedNode.FullPath.Length > 4)

156

{

DirectoryInfo di = new DirectoryInfo(treeView1.SelectedNode.FullPath.Remove(2, 1));

try

{

FileInfo[] fi = di.GetFiles(); foreach (FileInfo f in fi)

{

treeView2.Nodes.Add(f.Name);

}

}

catch

{

return;

}

}

}

private void treeView2_AfterSelect(object sender, TreeViewEventArgs e)

{

if (treeView2.SelectedNode != null)

{

DirectoryInfo di = new DirectoryInfo(treeView1.SelectedNode.FullPath.Remove(2, 1));

FileInfo[] fi = di.GetFiles(); foreach (FileInfo f in fi)

{

if (f.Name == treeView2.SelectedNode.FullPath)

{

listBox1.Items.Clear(); foreach (var item in

f.Attributes.ToString().Split(' '))

157

{

listBox1.Items.Add(item.TrimEnd(','));

}

}

}

}

}

}

}

Пример формы и работы приложения представлен на рис. 73.

Рис. 73. Пример экранной формы приложения

158

Вопросы по теме:

1.Какова организация работы пользователя с устройством хранения информации?

2.Что включает файловая система, как часть операционной системы?

3.Какая информация описывает свойства файла? Приведите примеры атрибутов файла.

159

ЛАБОРАТОРНАЯ РАБОТА № 8. УПРАВЛЕНИЕ УСТРОЙСТВАМИ ВВОДА-ВЫВОДА В ПРИЛОЖЕНИЯХ С ПОМОЩЬЮ ФУНКЦИЙ API

Цель работы: получить представление о функциях API для управления устройствами ввода-вывода, а также стандартные методы получения информации о состоянии устройств ввода-вывода с помощью библиотек базовых классов .NET.

Для выполнения лабораторной работы требуется написать программы, позволяющие пользователю получить информацию о состоянии клавиатуры, возвращать активность приложения, менять раскладку клавиатуры.

Краткие теоретические сведения

Управление вводом-выводом

Функции ОС по управлению УВВ:

ОС должна

передавать устройствам команды,

перехватывать прерывания

обрабатывать ошибки;

ОС должна обеспечивать интерфейс между устройствами и остальной частью системы.

интерфейс должен быть одинаковым для всех типов устройств (независимость от устройств).

Многоуровневая организация подсистемы ввода-вывода представлена на рис. 74.

160