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

lec

.pdf
Скачиваний:
41
Добавлен:
24.03.2015
Размер:
3.43 Mб
Скачать

try

{

Console.Write("Введите новый средний балл : "); newBall = float.Parse(Console.ReadLine());

}

catch

{

Console.WriteLine("ОШИБКА. Повторите ввод сначала"); continue;

}

try

{

k = 0;

while (fs.Position < fs.Length)

{

// Запомнить позицию читаемой записи pos = fs.Seek(0, SeekOrigin.Current);

std = (Student)frm.Deserialize(fs);

if (std.fio == fio)

{

Console.WriteLine("---Найден---"); std.ball = newBall;

fs.Seek(pos, SeekOrigin.Begin); frm.Serialize(fs, std);

k = 1;

}

}

if (k == 0)

Console.WriteLine("Студент не найден"); fs.Seek(0, SeekOrigin.Begin);

}

catch (Exception e)

{

Console.WriteLine("Error: " + e.Message); return;

}

}

fs.Close();

}

}

2. OpenFileDialog и SaveFileDialog для SDI-приложений

Добавляем на форму элементы TextBox и MainMenu. В MainMenu будет всего три пункта — File, Open и Save .В TextBox устанавливаем свойство Multiple в true.

201

Добавляем на форму элемент управления OpenFileDialog из окна панели инструментов ToolBox. Подобно элементу MainMenu, он будет располагаться на панели невидимых компонент:

рис.8

Свойство FileName задает название файла, которое будет находиться в поле "Имя файла:" при появлении диалога. На рис.8 название в этом поле — "Текстовые файлы".

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

"Тип файлов". Здесь введено Text Files (*.txt)|*.txt|All Files(*.*)|*.* что означает обзор либо текстовых файлов, либо всех.

Свойство InitialDirectory позволяет задать директорию, откуда будет начинаться обзор. Если это свойство не установлено, исходной директорией будет рабочий стол.

Из окна ToolBox перетаскиваем так же и элемент SaveFileDialog — свойства этого элемента в точности такие же, как и у диалога

OpenFileDialog.

Переходим в код формы. Подключаем пространство имен для работы с файловыми потоками:

using System.IO;

Добавляем обработчик для пункта меню Open: private void menuOpen_Click(object sender, System.EventArgs e)

{

//Показываем диалог выбора файла openFileDialog1.ShowDialog();

202

// Переменной fileName присваиваем имя открываемого файла string fileName = openFileDialog1.FileName;

//Создаем поток fs и открываем файл для чтения.

FileStream filestream = File.Open(fileName, FileMode.Open, FileAccess.Read);

//Проверяем, открыт ли поток, и если открыт, выполняем условие if ( filestream != null )

{

//Создаем объект streamreader и связываем его с потоком filestream StreamReader streamreader = new StreamReader(filestream);

//Считываем весь файл и записываем его в TextBox txtBox.Text = streamreader.ReadToEnd();

//Закрываем поток. filestream.Close();

}

}

Добавляем обработчик для пункта меню Save: private void menuSave_Click(object sender, System.EventArgs e)

{

//Показываем диалог выбора файла saveFileDialog1.ShowDialog();

// В качестве имени сохраняемого файла устанавливаем переменную fileName string fileName = saveFileDialog1.FileName;

//Создаем поток fs и открываем файл для записи.

FileStream filestream = File.Open(fileName, FileMode.Create, FileAccess.Write);

//Проверяем, открыт ли поток, и если открыт, выполняем условие if ( filestream != null )

{

//Создаем объект streamwriter и связываем его с потоком filestream StreamWriter streamwriter = new StreamWriter(filestream);

//Записываем данные из TextBox в файл streamwriter.Write(txtBox.Text);

//Переносим данные из потока в файл streamwriter.Flush();

//Закрываем поток filestream.Close();

}

}

Вконсольном приложении:

//Открыть диалоговое окно для выбора файла

OpenFileDialog dlgOpen = new OpenFileDialog();

203

dlgOpen.Title = "Найдите требуемый файл";

// заголовок окна

// Показать окно

if (dlgOpen.ShowDialog() == DialogResult.OK)

{

FileStream fs = new FileStream(dlgOpen.FileName,FileMode.Open);

. . .

3.Работа с каталогами и файлами

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

Directory, File, Directorylnfo и Filelnfo. С их помощью можно выпол-

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

Классы Directory и File реализуют свои функции через статические методы.

Directorylnfo и Filelnfo обладают схожими возможностями, но они реализуются путем создания объектов соответствующих классов.

DirectoryInfo - класс

Предоставляет методы экземпляра класса для создания, перемещения, копирования и перечисления объектов файловой системы в папках и вложенных папках.

[Serializable]

public sealed class DirectoryInfo : FileSystemInfo

Открытые конструкторы

DirectoryInfo - конструк-

Инициализирует

новый экземпляр

тор

 

 

класса DirectoryInfo для указанного пути.

 

 

 

 

 

 

 

 

Открытые свойства

 

 

 

 

 

 

 

Attributes

 

 

Возвращает

 

или

устанавливает

(унаследовано

от

FileAttributes

для

текущего

класса

FileSystemInfo)

 

 

FileSystemInfo.

 

 

 

 

CreationTime

 

 

Возвращает

или

устанавливает

время

(унаследовано

от

создания текущего объекта FileSystemInfo.

FileSystemInfo)

 

 

 

 

 

 

 

CreationTimeUtc

 

 

Возвращает

или

устанавливает

время

(унаследовано

от

создания текущего объекта FileSystemInfo

FileSystemInfo)

 

 

в формате всеобщего скоординированного

 

 

 

времени (UTC).

 

 

 

 

Exists

 

 

Переопределен. Возвращает значение,

 

 

 

определяющее, создана ли папка.

 

Extension (унаследовано

 

Возврат строки,

содержащей расшире-

от FileSystemInfo)

 

 

ние файла.

 

 

 

 

FullName

 

 

Возвращает полный путь к папке или

(унаследовано

от

файлу.

 

 

 

 

FileSystemInfo)

 

 

 

 

 

 

 

204

LastAccessTime

 

Возвращает или

устанавливает время

 

(унаследовано

от

последнего доступа к текущему файлу или

FileSystemInfo)

 

папке.

 

 

 

 

 

 

 

LastAccessTimeUtc

 

Возвращает или устанавливает дату и

(унаследовано

от

время последнего доступа к

заданному

FileSystemInfo)

 

файлу или папке в формате всеобщего

 

 

скоординированного времени (UTC).

LastWriteTime

 

Возвращает или

устанавливает время

(унаследовано

от

последней

операции

записи

в

текущий

FileSystemInfo)

 

файл или папку.

 

 

 

 

 

 

 

LastWriteTimeUtc

 

Возвращает или

устанавливает время

(унаследовано

от

последней

операции

записи

в

текущий

FileSystemInfo)

 

файл или папку в формате всеобщего ско-

 

 

ординированного времени (UTC).

 

Name

 

Переопределен. Возвращает имя дан-

 

 

ного экземпляра DirectoryInfo.

 

 

Parent

 

Возвращает родительскую папку ука-

 

 

занной вложенной папки.

 

 

Root

 

Возвращает корневой элемент пути.

Открытые методы

 

 

 

 

 

 

Create

Создает папку.

 

 

 

 

CreateObjRef

Создает объект, который содержит всю необ-

(унаследовано

ходимую информацию для создания прокси-

от

сервера, используемого для коммуникации с

MarshalByRefObject)

удаленными объектами.

 

 

 

CreateSubdirectory Создает вложенную папку или вложенные папки по указанному пути. Указанный путь должен относиться к текущему экземпляру класса

DirectoryInfo.

 

Delete

 

Переопределен. Удаляет из пути DirectoryInfo

 

 

 

и его содержимое. Перегружен.

 

Equals

 

Перегружен. Определяет, равны ли два эк-

 

(унаследовано

отземпляра Object.

 

Object)

 

 

 

GetDirectories

 

Возвращает вложенные папки текущей папки.

 

 

 

Перегружен.

 

GetFiles

 

Возвращает список файлов текущей папки.

 

 

 

Перегружен.

 

GetFileSystemInfos

 

Перегружен. Извлекает массив объектов со

 

 

строгим типом FileSystemInfo.

 

 

 

 

 

GetHashCode

 

Служит хеш-функцией для конкретного типа,

 

(унаследовано

отпригоден для использования в алгоритмах хеши-

 

Object)

 

рования и структурах данных, например в хеш-

 

 

 

таблице.

205

GetLifetimeService

Извлекает служебный объект текущего срока

(унаследовано от

 

действия, который управляет средствами срока

MarshalByRefObject)

действия данного экземпляра.

GetObjectData

 

Устанавливает объект SerializationInfo с име-

(унаследовано

 

нем файла и дополнительными сведениями об

от FileSystemInfo)

 

исключении.

GetType

 

Возвращает Type текущего экземпляра.

(унаследовано

от

 

Object)

 

 

InitializeLifetimeService

Получает служебный объект срока действия,

для управления средствами срока действия дан-

(унаследовано

от

ного экземпляра.

MarshalByRefObject)

 

 

MoveTo

 

Перемещает экземпляр DirectoryInfo и его со-

 

 

держимое в другое место.

Refresh

 

Обновление состояния объекта.

(унаследовано от

 

 

FileSystemInfo)

 

 

ToString

 

Переопределен. Возвращает исходный путь,

 

 

указанный пользователем.

Пример использования класса Directorylnfo.

//Создаются два каталога, выводится информация о них

//и предпринимается попытка удаления каталога.

using System; using System.IO; class Class1

{

static void DirInfo (DirectoryInfo di)

{

// Вывод информации о каталоге

Console.WriteLine ("===== Информация о папке =====");

Console.WriteLine ("Полное имя: " + di.FullName); Console.WriteLine ("Имя: " + di.Name); Console.WriteLine ("Родительский каталог: " + di.Parent); Console.WriteLine ("Создан: " + di.CreationTime); Console.WriteLine ("Атрибуты: " + di.Attributes); Console.WriteLine ("Корневой каталог: " + di.Root);

Console.WriteLine ("===========================");

}

static void Main ()

{

DirectoryInfo di1 = new DirectoryInfo (@"c:\MyDir"); DirectoryInfo di2 = new DirectoryInfo (@"c:\MyDir\temp"); try

{ // Создать каталоги di1.Create (); di2.Create ();

// Вывести информацию о каталогах

206

DirInfo (di1);

DirInfo (di2);

// Попытаться удалить каталог

Console.WriteLine ("Попытка удалить {0}.", di1.Name); di1.Delete ();

}

catch (Exception)

{

Console.WriteLine ("Попытка не удалась ");

}

}

}

Примечание:

di1.Delete ( true); - можно удалить и непустой каталог.

FileInfo - класс

Предоставляет методы экземпляра для создания, копирования, удаления, перемещения и открытия файлов, а также помогает при создании объектов FileStream.

[Serializable]

public sealed class FileInfo : FileSystemInfo

Открытые конструкторы

FileInfo - конст-

руктор

Открытые свойства

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

Attributes

 

Возвращает или устанавливает FileAttributes

 

(унаследовано

от

для текущего класса FileSystemInfo.

FileSystemInfo)

 

 

CreationTime

Возвращает или устанавливает время создания

(унаследовано

 

текущего объекта FileSystemInfo.

от FileSystemInfo)

 

CreationTimeUtc

Возвращает или устанавливает временя созда-

(унаследовано от

ния текущего объекта FileSystemInfo в формате

FileSystemInfo)

всеобщего скоординированного времени (UTC).

Directory

 

Возвращает экземпляр родительской папки.

DirectoryName

Возвращает строку, описывающую полный

 

 

путь к папке.

Exists

 

Возвращает значение, показывающее, сущест-

 

 

вует ли файл. Переопределен.

Extension

(унас-

Возврат строки, содержащей расширение фай-

ледовано

 

ла.

от FileSystemInfo)

 

FullName

(унас-

Возвращает полный путь к папке или файлу.

ледовано

 

 

207

от FileSystemInfo)

 

LastAccessTime

Возвращает или устанавливает время послед-

(унаследовано от

него доступа к текущему файлу или папке.

FileSystemInfo)

 

LastAccessTimeUtc

Возвращает или устанавливает дату и время

последнего доступа к заданному файлу или папке

(унаследовано

в формате всеобщего скоординированного време-

от FileSystemInfo)

ни (UTC).

LastWriteTime

Возвращает или устанавливает время послед-

(унаследовано от

ней операции записи в текущий файл или папку.

FileSystemInfo)

 

LastWriteTimeUtc Возвращает или устанавливает время послед- (унаследовано ней операции записи в текущий файл или папку в от FileSystemInfo) формате всеобщего скоординированного времени

(UTC).

Length

 

Возвращает размер текущего файла.

 

 

Name

 

Возвращает имя файла. Переопределен.

 

Открытые методы

 

 

 

 

 

 

 

AppendText

 

 

Создает объект StreamWriter, добавляющий

 

 

 

 

текст в файл, описываемый этим экземпляром

 

 

 

 

FileInfo.

 

 

 

 

CopyTo

 

 

Перегружен. Копирование существующего

 

 

 

 

файла в новый файл.

 

 

 

Create

 

 

Создание файла.

 

 

 

CreateObjRef (унас-

Создает объект, который содержит всю не-

ледовано

 

 

обходимую информацию для создания прокси-

от MarshalByRefObject)

сервера, используемого для коммуникации

с

 

 

 

 

удаленными объектами.

 

 

 

CreateText

 

 

Создание

объекта StreamWriter,

который

 

 

 

 

записывает новый текстовый файл.

 

 

Delete

 

 

Удаление файла без возможности восста-

 

 

 

 

новления. Переопределен.

 

 

 

Equals

 

 

Перегружен. Определяет, равны ли два эк-

(унаследовано

от

 

земпляра Object.

 

 

 

Object)

 

 

 

 

 

 

 

GetHashCode

 

 

Служит хеш-функцией для конкретного ти-

(унаследовано

от

 

па, пригоден для использования в алгоритмах

Object)

 

 

хеширования и структурах данных, например

 

 

 

 

в хеш-таблице.

 

 

 

GetLifetimeService

 

 

Извлекает

служебный

объект

текущего

(унаследовано от

 

 

срока действия, который управляет средства-

MarshalByRefObject)

 

ми срока действия данного экземпляра.

 

GetObjectData

 

 

Устанавливает объект

SerializationInfo

с

(унаследовано

 

 

именем файла и дополнительными сведениями

от FileSystemInfo)

 

 

об исключении.

 

 

 

 

 

 

 

 

GetType

 

 

Возвращает Type текущего экземпляра.

 

(унаследовано

от

 

 

 

 

 

208

Object)

 

 

InitializeLifetimeService

Получает служебный объект срока дейст-

вия, для управления средствами срока дейст-

(унаследовано от

вия данного экземпляра.

MarshalByRefObject)

 

 

MoveTo

Перемещение заданного файла в новое по-

 

ложение с возможностью задания нового име-

 

ни файла.

Open

Открывается файл с различными правами

 

доступа на чтение-запись и совместное ис-

 

пользование. Перегружен.

OpenRead

Создает разрешенный только для чтения

 

FileStream.

OpenText

Создает StreamReader с кодировкой UTF-8,

 

который выполняет считывание из сущест-

 

вующего текстового файла.

OpenWrite

Создает разрешенный только для записи

 

объект FileStream.

Refresh (унаследо-

Обновление состояния объекта.

вано

 

от FileSystemInfo)

 

ToString

Переопределен. Возвращает полный путь

 

как строку.

Пример. using System; using System.IO;

class Test

{

public static void Main ()

{

string path = @"c:\temp\MyTest.txt";

if ( !File.Exists (path) )

{

//Создать файл для записи и освободить ресурсы

//с помощью Dispose () после выхода из блока using using (StreamWriter sw = File.CreateText (path))

{

sw.WriteLine ("Hello"); sw.WriteLine ("And"); sw.WriteLine ("Welcome");

}

}

// Открыть файл для чтения. using (StreamReader sr = File.OpenText (path))

{

string s = "";

while ( (s = sr.ReadLine ()) != null)

209

{

Console.WriteLine (s);

}

}

try

{

string path2 = path + "temp";

// Путь к несуществующему файлу. Исключение не возбуждается. File.Delete (path2);

// Копировать файл. File.Copy (path, path2);

Console.WriteLine ("{0} был скопирован в {1}.", path, path2);

// Удалить только что созданный файл. File.Delete (path2);

Console.WriteLine ("{0} был успешно удален.", path2);

}

catch (Exception e)

{

Console.WriteLine ("ОШИБКА: {0}", e);

}

}

}

Тот же пример без оператора using using System;

using System.IO;

class Test

{

public static void Main ()

{

string path = @"c:\temp\MyTest.txt";

if (!File.Exists (path))

{

// Создать файл для записи

StreamWriter sw = File.CreateText (path); sw.WriteLine ("Hello");

sw.WriteLine ("And"); sw.WriteLine ("Welcome"); sw.Close ();

}

// Open the file to read from. StreamReader sr = File.OpenText (path); string s = "";

while ( (s = sr.ReadLine ()) != null)

{

Console.WriteLine (s);

}

sr.Close ();

210

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]