Учебное пособие 800564
.pdfpublic 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