русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Практикум


Дата добавления: 2013-12-23; просмотров: 908; Нарушение авторских прав


  1. Работа с двоичными файлами: создать файл и записать в него вещественные числа из диапазона от a до b с шагом h. Вывести на экран все компоненты файла с нечетными порядковыми номерами.
using System;using System.Text;using System.IO; namespace MyProgram{ class Program { static void Main() { Console.Write("a= "); double a=double.Parse(Console.ReadLine()); Console.Write("b= "); double b=double.Parse(Console.ReadLine()); Console.Write("h= "); double h=double.Parse(Console.ReadLine()); //Записываем в файл t.dat вещественные числа из заданного диапазона FileStream f=new FileStream("t.dat",FileMode.Open); BinaryWriter fOut=new BinaryWriter(f); for (double i=a; i<=b; i+=h) { fOut.Write(i);; } fOut.Close(); //Объекты f и fIn связаны с одним и тем же файлом f=new FileStream("t.dat",FileMode.Open); BinaryReader fIn=new BinaryReader(f); long m=f.Length; //определяем количество байт в потоке //Читаем данные из файла t.dat начиная с элемента с номером 1, т.е с 8 байта, //перемещая внутренний указатель на 16 байт, т.е. на два вещественных числа for (long i=8; i<m; i+=16) { f.Seek(i,SeekOrigin.Begin); a=fIn.ReadDouble(); Console.Write("{0:f2} ",a); } fIn.Close(); f.Close(); } }}

 

  1. Работа с текстовым (символьным) файлом. Дан текстовый файл. Найти количество строк, которые начинаются с данной буквы.

Замечание: Напоминаем, что файл text.txt должен содержать английский текст

using System;using System.Text;using System.IO; using System.Text.RegularExpressions; namespace MyProgram{ class Program { static void Main() { Console.Write("Введите заданную букву: "); char a=char.Parse(Console.ReadLine()); StreamReader fileIn = new StreamReader("text.txt"); string text=fileIn.ReadToEnd(); //считываем из файла весь текст fileIn.Close(); int k=0; //разбиваем текст на слова используя регулярные выражения string []newText=Regex.Split(text,"[ ,.:;]+"); //подсчитываем количество слов, начинающихся на заданную букву foreach( string b in newText) if (b[0]==a)++k; Console.WriteLine("k= "+k); } }}

Самостоятельная работа



Используя дополнительную литературу и Интернет рассмотреть использование:

  1. класса MemoryStream;
  2. классов StringReader и StringWriter

Лекция 12. Работа с файловой системой

12.1.Работа с файловой системой: классы Directory и Filе и классы DirectoryInfo и FileInfo

В пространстве имен System.IO предусмотрено четыре класса, которые предназначены для работы с файловой системой компьютера, т.е для создания, удаления переноса и т.д. файлов и каталогов.

Первые два типа - Directory и Fi1е реализуют свои возможности с помощью статических методов, поэтому данные классы можно использовать без создания соответствующих объектов (экземпляров классов).

Следующие типы - DirectoryInfo и FileInfo обладают схожими функциональными возможностями c Directory и Fi1е, но порождены от класса FileSystemInfo и поэтому реализуются путем создания соответствующих экземпляров классов.

Замечание. Перед изучением данной лекции скопируйте на диск d своего компьютера папку prim из раздела 12 данного электронного учебника. Внимательно изучите содержимое данной папки.

12.2 Класс FileSystemInfo

Значительная часть членов класса FileSystemInfo предназначена для работы с общими характеристиками файла или каталога (метками времени, атрибутами и т. п.). Рассмотрим некоторые свойства FileSystemInfo:

Свойство Описание
Attributes Позволяет получить или установить атрибуты для данного объекта файловой системы. Для этого свойства используются значения и перечисления FileAttributes
CreationTime Позволяет получить или установить время создания объекта файловой системы
Exists Может быть использовано для того, чтобы определить, существует ли данный объект файловой системы
Extension Позволяет получить расширение для файла
FullName Возвращает имя файла или каталога с указанием пути к нему в файловой системе
LastAccessTime Позволяет получить или установить время последнего обращения к объекту файловой системы
LastWriteTime Позволяет получить или установить время последнего внесения изменений в объект файловой системы
Name Возвращает имя указанного файла. Это свойство доступно только для чтения. Для каталогов возвращает имя последнего каталога в иерархии, если это возможно. Если нет, возвращает полностью определенное имя

В FileSystemInfo предусмотрено и несколько методов. Например, метод Delete() - позволяет удалить объект файловой системы с жесткого диска, a Refresh() - обновить информацию об объекте файловой системы.

12.3 Класс DirectoryInfo

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

Член Описание
Create() CreateSubDirectory() Создают каталог (или подкаталог) по указанному пути в файловой системе
Delete() Удаляет пустой каталог
GetDirectories() Позволяет получить доступ к подкаталогам текущего каталога (в виде массива объектов DirectoryInfo)
GetFiles() Позволяет получить доступ к файлам текущего каталога (в виде массива объектов FileInfo)
MoveTo() Перемещает каталог и все его содержимое на новый адрес в файловой системе
Parent Возвращает родительский каталог в иерархии файловой системы

Работа с типом DirectoryInfo начинается с того, что мы создаем экземпляр класса (объект), указывая при вызове конструктора в качестве параметра путь к нужному каталогу. Если мы хотим обратиться к текущему каталогу (то есть каталогу, в котором в настоящее время производится выполнение приложения), вместо параметра используется обозначение ".". Например:

// Создаем объект DirectoryInfo, которому будет обращаться к текущему каталогуDirectoryInfo dir1 = new DirectoryInfo(".");// Создаем объект DirectoryInfo, которому будет обращаться к каталогу d:\primDirectoryInfo 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); } }}

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

Метод CreateSubdirectory() позволяет создать в выбранном каталоге как единственный подкаталог, так и множество подкаталогов (в том числе, и вложенных друг в друга). Создадим в каталоге несколько дополнительных подкаталогов:

DirectoryInfo dir = new DirectoryInfo(@"d:\prim");dir.CreateSubdirectory("doc"); //создали подкаталогdir.CreateSubdirectory(@"book\2008"); //создали вложенный подкаталог

Задание. Создайте вложенный подкаталог best\2008 для каталога d:\prim\bmp.

Метод MoveTo() позволяет переместить текущий каталог по заданному в качестве параметра адресу. При этом возможно произвести переименование каталога. Например:

DirectoryInfo dir = new DirectoryInfo(@"d:\prim\bmp");dir.MoveTo(@"d:\prim\letter\bmp");

В данном случае каталог bmp перемещается в по адресу d:\prim\letter\bmp. Так как имя перемещаемого каталога совпадает с крайним правым именем в адресе нового местоположения каталога, то переименования не происходит. Следующий пример позволит нам переименовать текущий каталог:

DirectoryInfo dir = new DirectoryInfo(@"d:\prim\letter");dir.MoveTo(@"d:\prim\archive");

12.4 Класс Directory

Работать с каталогами файловой системы компьютера можно и при помощи класса Directory, функциональные возможности которого во многом совпадают с возможностями DirectoryInfo. Но члены данного класса реализованы статически, поэтому для их использования нет необходимости создавать объект.

Рассмотрим работу с методами данного класса на примерах.

Замечание. Удалите с диска d измененную папку prim. И еще раз скопируйте ее исходную версию из раздела 12 данного электронного учебника.

Directory.CreateDirectory(@"d:\prim\2008");//создали подкаталог 2008Directory.Move(@"d:\prim\bmp", @"d:\prim\2008\bmp");//перенесли каталог bmp в каталог 2008Directory.Move(@"d:\prim\letter", @"d:\prim\archives");//переименовали каталог letter в archives

Замечания.

  1. Удаление каталога возможно только тогда, когда он пуст.
  2. На практике комбинируют использование классов 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);

}

12.2 Работа с файлами



<== предыдущая лекция | следующая лекция ==>
Передача параметров в метод Main из командной строки | Практикум


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.01 сек.